为了账号安全,请及时绑定邮箱和手机立即绑定

忽略在 C# .NET 中抛出的特定异常

忽略在 C# .NET 中抛出的特定异常

C#
慕后森 2021-09-19 15:54:32
是否可以让 .NET CLR 忽略某些异常?例如,抛出将被简单地跳过并且函数继续,好像什么也没发生?是否可以在不修改抛出代码的位置的情况下执行此操作?该软件是 .NET 4.6.1 WinForms。原因是由于逆向工程一些具有数千个校验和例程的恶意软件,我需要修改 MSIL 代码并因此更改校验和,通过 dnlib 脚本删除所有例程将是非常耗时的任务。如果我可以阻止特定的异常,我就可以避免这个耗时的任务。编辑:我记得在某些 WinForms 应用程序中看到“发生异常,您想继续还是退出?” 当然,这就是我需要的,如果我能有效地拒绝异常并继续,就好像它从未发生过一样。这是一个例子。我怎样才能启用它?示例:请注意,我不是在编写代码。我正在用 dnspy 编辑一个已编译的 exe,所以我不能轻易更改代码,我必须手动编辑 MSIL 字节代码。public void Test(){  throw new ArgumentException("ignore this");  MessageBox.Show("Successfully ignored exception");}
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

您不能以您想要的方式“忽略”异常。但是,如果您正在遍历例程,则始终可以跳过引发异常的一次迭代……例如:


while(condition)

{

    try

    {

        // your iteration

    }

    catch (Exception)

    {

        /* don't do a catch, so it will jump back to your while statement and just 

        try the next one */

    }

}

这应该会产生您想要的效果,因为它只会忽略会阻止程序运行的迭代。希望这可以帮助!


查看完整回答
反对 回复 2021-09-19
?
冉冉说

TA贡献1877条经验 获得超1个赞

您显然可以在 Catch 中放置一个 if 检查以在特定异常上操作自定义功能 -


            try

            {

                // function which you will operate

            }

            catch (Exception ex)

            {

                if (ex is StackOverflowException) //(Type your exception type here)

                {

                    //log this if you want

                }

                else

                {

                    throw; //or handle as per your requirement

                }


            }


查看完整回答
反对 回复 2021-09-19
  • 2 回答
  • 0 关注
  • 406 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信