rhe*_*980 5 c# debugging resharper assert
我的代码我正在使用System.Function方法Debug.Assert(..)验证方法开头的输入参数(请参阅下面的示例代码剪切):
public class TestClass : IInterface
{
}
public class Verifier
{
public static void Verify(IInterface objectToVerify)
{
Debug.Assert((objectToVerify is TestClass), "Passed object must be type of TestClass");
// ReSharper (Version 7.1.1) marks here "Expression is always false
if (!(objectToVerify is TestClass))
{
return;
}
// do something ...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉该Debug.Assert声明,ReSharper警告就会消失.在我看来,ReSharper必须忽略这个Debug.Assert陈述,因为如果Debug.Assert语句没有完成,则执行下面的代码(例如,在发布模式下)
你有什么意见?或者是否有其他实施方案?
不,我认为resharper是错误的,原因很简单: Resharper说,当我们知道事实并非如此时,代码是无法访问的.
如果在对话框中单击"忽略",则发布版本将始终执行该代码,调试版本将触发它.
在断言是否是错误之后继续并不重要,它仍然是无法访问的代码.
ReSharper 足够聪明,知道Debug.Assert()如果objectToVerify不是TestClass. 因此,if语句中的表达式确实总是false(否则if首先不会到达该语句)。
您可以通过编写以下内容来解决该警告:
public static void Verify(IInterface objectToVerify)
{
if (!(objectToVerify is TestClass))
{
Debug.Assert(false, "Passed object must be type of TestClass");
return;
}
// do something ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |