我创建了一个扩展方法,以避免输入类似下面的"if"的代码:
Guid? nullableGuid = something;
if (!nullableGuid.HasValue || nullableGuid == Guid.Empty)
{
// do stuff
}
else
{
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
我的扩展方法是:
public static bool IsNullOrEmpty(this Guid? g)
{
return !g.HasValue || g.Value == Guid.Empty;
}
Run Code Online (Sandbox Code Playgroud)
这很好,因为现在我的代码看起来更干净,更容易阅读:
Guid? nullableGuid = something;
if (nullableGuid.IsNullOrEmpty())
{
// do stuff
}
else
{
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我尝试在else块中使用Guid,现在resharper会抱怨.它没有意识到我在扩展方法中检查了HasValue.当然,我可以用注释来抑制警告或更改resharper选项,但这些都不是好的选择.如果我必须在任何地方评论代码,它往往会破坏使代码更清洁的目的.如果我更改resharper选项,那么,这只会是疯狂的.
我想知道是否有更好的选择.有没有办法"告诉"resharper它是"好的",而不必在任何地方评论代码或禁用检查?
您可以通过合同注释"告诉"Resharper.http://blogs.jetbrains.com/dotnet/2012/08/contract-annotations-in-resharper-7/
该链接的一个例子:
[ContractAnnotation("s:null => true")]
public bool IsNullOrEmpty(string s)
Run Code Online (Sandbox Code Playgroud)
从那以后,我会收集以下内容为你做的伎俩:
[ContractAnnotation("g:null => true")]
public bool IsNullOrEmpty(this Guid? g)
Run Code Online (Sandbox Code Playgroud)
如果您实际上不想依赖Jetbrains注释程序集,我认为您可以在外部定义合同,请参阅http://blogs.jetbrains.com/dotnet/2010/11/resharper-nullreferenceexception-analysis-and -its-contracts /关于该和一般JetBrain合同的更多细节.
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |