我总是使用(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) 我刚刚下载了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块中任何数量的语句,这些语句不是对自定义记录器的调用,只需将调用附加到记录器"?