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())
是我迄今为止想出的最短的。