0

我创建了一个扩展方法以避免必须键入如下“if”之类的代码:

Guid? nullableGuid = something;

if (!nullableGuid.HasValue || nullableGuid == Guid.Empty)
{
    // do stuff
}
else
{
    // do other stuff
}

我的扩展方法是:

public static bool IsNullOrEmpty(this Guid? g)
{
    return !g.HasValue || g.Value == Guid.Empty;
}

这很好,因为现在我的代码看起来更干净并且更易于阅读:

Guid? nullableGuid = something;

if (nullableGuid.IsNullOrEmpty())
{
    // do stuff
}
else
{
    // do other stuff
}

问题是,如果我尝试在 else 块中使用 Guid,现在 resharper 会抱怨。它没有意识到我在扩展方法中检查了 HasValue。当然,我可以用注释来抑制警告或更改 resharper 选项,但这些都不是好的选项。如果我必须在任何地方评论代码,它往往会破坏首先使代码更清晰的目的。如果我更改 resharper 选项,那将是疯狂的。

我想知道是否有更好的选择。有没有办法“告诉” resharper 它是“好的”,而不必在任何地方评论代码或禁用检查?

4

2 回答 2

7

您可以通过合同注释“告诉”Resharper。http://blogs.jetbrains.com/dotnet/2012/08/contract-annotations-in-resharper-7/

该链接中的一个示例:

[ContractAnnotation("s:null => true")]
public bool IsNullOrEmpty(string s)

由此,我会收集以下内容可以为您解决问题:

[ContractAnnotation("g:null => true")]
public bool IsNullOrEmpty(this Guid? g)

更新:

如果您实际上不想依赖 Jetbrains 注释程序集,我认为您可以在外部定义合同,请参阅http://blogs.jetbrains.com/dotnet/2010/11/resharper-nullreferenceexception-analysis-and -its-contracts/了解更多关于 JetBrain 合同的详细信息。

于 2013-08-12T15:50:56.910 回答
0

我想有时你不得不忽略一些 ReSharper 警告。或者您使用项目设置并将其设置为提示(例如)。但这很烦人。如果您从事团队项目,我不希望隐藏任何 ReSharper 警告。

于 2013-08-12T15:38:45.340 回答