C# 抛出临时异常而不使用“异常”;“检测到无法访问的代码”;

C# 抛出临时异常而不使用“异常”;“检测到无法访问的代码”;,c#,debugging,exception,unreachable-code,C#,Debugging,Exception,Unreachable Code,在编写代码时,我经常临时注入随机异常,以确保错误流符合预期 乙二醇 问题是我将警告设置为错误,因此编译将以失败告终,因为“更多的代码”将永远不会运行 因此,只需添加一个条件,您可以说: public void SomeFunc() { Console.WriteLine("Some code"); if (true) throw new Exception("BOOOOM!"); //added temporarily Console.WriteLine("S

在编写代码时,我经常临时注入随机异常,以确保错误流符合预期

乙二醇

问题是我将警告设置为错误,因此编译将以失败告终,因为“更多的代码”将永远不会运行

因此,只需添加一个条件,您可以说:

public void SomeFunc()
{
   Console.WriteLine("Some code");

   if (true)
       throw new Exception("BOOOOM!"); //added temporarily

   Console.WriteLine("Some more code");
}
但是不,这个编译器足够聪明,可以注意到条件始终为true,并再次标记CS0162

我通常会得出以下结论:

public void SomeFunc()
{
   Console.WriteLine("Some code");

   var debug = true;
   if (debug)
       throw new Exception("BOOOOM!"); //added temporarily

   Console.WriteLine("Some more code");
}
既然我很懒,那么我的问题是,是否有更简单的方法来愚弄编译器?一行就好了


(是的,我最终还是写了单元测试;)

这里有一个两行程序。Resharper建议并为我做了这件事。否则,记住这一点几乎是不可能的

    throw new Exception("Boo!");

#pragma warning disable 162

    // The unreachable code is here            

#pragma warning restore 162
虽然这是一个直接的答案,但我可能不会这么做,因为它很笨重

您还可以更改错误的严重性,使其编译时带有警告。这是我的默认设置

如何做到这一点的细节因Visual Studio版本而异

在Visual Studio 2019中,您可以在.editorconfig文件中添加或修改此选项:

[*.cs]

# CS0162: Unreachable code detected
dotnet_diagnostic.CS0162.severity = warning

这是一条两轮航线。Resharper建议并为我做了这件事。否则,记住这一点几乎是不可能的

    throw new Exception("Boo!");

#pragma warning disable 162

    // The unreachable code is here            

#pragma warning restore 162
虽然这是一个直接的答案,但我可能不会这么做,因为它很笨重

您还可以更改错误的严重性,使其编译时带有警告。这是我的默认设置

如何做到这一点的细节因Visual Studio版本而异

在Visual Studio 2019中,您可以在.editorconfig文件中添加或修改此选项:

[*.cs]

# CS0162: Unreachable code detected
dotnet_diagnostic.CS0162.severity = warning

事实上,编译器相当愚蠢。它通常不承认非。这意味着您只需要创建一个始终为真的条件,其中至少有一个非常量表达式

我相信在阅读了链接之后,你会想出很多这样的东西。下面是一个例子:

if ("a".Length == 1) throw new Exception("...");

事实上,编译器相当愚蠢。它通常不承认非。这意味着您只需要创建一个始终为真的条件,其中至少有一个非常量表达式

我相信在阅读了链接之后,你会想出很多这样的东西。下面是一个例子:

if ("a".Length == 1) throw new Exception("...");

要愚弄编译器,请尝试计算一些方法,例如,
if(Math.Abs(0)==0)抛出新的NotImplementedException(“BOOM!”)if(Math.Abs(0)==0)抛出新的NotImplementedException(“BOOM!”)啊!没有意识到你可以在全球范围内设置个人严重性。那很有用,谢谢。话虽如此,我可能会把它开着,因为我确实想知道真正的案例。啊!没有意识到你可以在全球范围内设置个人严重性。那很有用,谢谢。话虽如此,我可能会把它开着,因为我确实想知道真正的案例。谢谢<代码>如果(“.”.Any())
是我到目前为止想出的最短的。谢谢<代码>如果(“..”.Any())是我迄今为止想出的最短的。