相关疑难解决方法(0)

首选:Nullable <>.HasValue或Nullable <>!= null?

我总是使用(a)Nullable<>.HasValue因为我喜欢语义.然而,最近我正在研究其他人现有的代码库,他们Nullable<> != null专门使用(b)代替.是否有理由使用一个而不是另一个,还是纯粹的偏好?

(一个)

int? a;
if (a.HasValue)
    // ...
Run Code Online (Sandbox Code Playgroud)

(b)中

int? b;
if (b != null)
    // ...
Run Code Online (Sandbox Code Playgroud)

.net c# null nullable

408
推荐指数
4
解决办法
9万
查看次数

用于捕获块记录的自定义检查模式

我刚刚下载了Resharper 7.1的试用版.我的目标是强制执行一个规则,我们的自定义记录器必须用在我们的c#代码库中的所有catch块上.例;

try{
    // Any amount of code
}
catch(Exception e){

}
Run Code Online (Sandbox Code Playgroud)

但应该是非法的:

try{
    // Any amount of code
}
catch(Exception e){
    Logger.LogException(e.Message, e);
}
Run Code Online (Sandbox Code Playgroud)

完全可以接受.为此,我设置了以下模式来检测和重新考虑因素.

搜索模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    $anycatchstatements$
}
Run Code Online (Sandbox Code Playgroud)

替换模式:

try{
    $anystatements$
}
catch($exceptiontype$ $exceptionarg$){
    Logger.LogException($exceptionarg$.Message, $exceptionarg$)
    $anycatchstatements$
}
Run Code Online (Sandbox Code Playgroud)

Resharper正在检测气味很好,但是将替换模式本身视为一种气味,因为Logging的附加行由$anycatchstatement$占位符匹配.

如何定义一个占位符来描述"匹配catch块中任何数量的语句,这些语句不是对自定义记录器的调用,只需将调用附加到记录器"?

c# resharper

9
推荐指数
1
解决办法
671
查看次数

标签 统计

c# ×2

.net ×1

null ×1

nullable ×1

resharper ×1