在没有 "unreachable code detected" 的情况下抛出临时异常
Throwing temporary exceptions without "unreachable code detected"
在编写代码时,我经常会临时注入随机异常以确保错误流符合预期。
例如
public void SomeFunc()
{
Console.WriteLine("Some code");
throw new Exception("BOOOOM!"); //added temporarily
Console.WriteLine("Some more code");
}
问题是我将警告设置为错误,因此编译将失败并显示 CS0162 Unreachable code detected,因为 "Some more code" 永远不会 运行.
所以只要加上你说的条件:
public void SomeFunc()
{
Console.WriteLine("Some code");
if (true)
throw new Exception("BOOOOM!"); //added temporarily
Console.WriteLine("Some more code");
}
但是不,这个编译器足够聪明,可以注意到条件永远为真,并再次标记 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 版本而异。 Here's the documentation.
在 Visual Studio 2019 年,您将在 .editorconfig 文件中添加或修改它:
[*.cs]
# CS0162: Unreachable code detected
dotnet_diagnostic.CS0162.severity = warning
事实上,编译器相当愚蠢。一般不识别非constant expressions。这意味着您只需要创建一个始终为真的条件,至少有一个非常量表达式。
我相信在阅读完 link 后,您可以想出 loads 个。这是一个例子:
if ("a".Length == 1) throw new Exception("...");
在编写代码时,我经常会临时注入随机异常以确保错误流符合预期。
例如
public void SomeFunc()
{
Console.WriteLine("Some code");
throw new Exception("BOOOOM!"); //added temporarily
Console.WriteLine("Some more code");
}
问题是我将警告设置为错误,因此编译将失败并显示 CS0162 Unreachable code detected,因为 "Some more code" 永远不会 运行.
所以只要加上你说的条件:
public void SomeFunc()
{
Console.WriteLine("Some code");
if (true)
throw new Exception("BOOOOM!"); //added temporarily
Console.WriteLine("Some more code");
}
但是不,这个编译器足够聪明,可以注意到条件永远为真,并再次标记 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 版本而异。 Here's the documentation.
在 Visual Studio 2019 年,您将在 .editorconfig 文件中添加或修改它:
[*.cs]
# CS0162: Unreachable code detected
dotnet_diagnostic.CS0162.severity = warning
事实上,编译器相当愚蠢。一般不识别非constant expressions。这意味着您只需要创建一个始终为真的条件,至少有一个非常量表达式。
我相信在阅读完 link 后,您可以想出 loads 个。这是一个例子:
if ("a".Length == 1) throw new Exception("...");