要检查空Guid的扩展方法?让ReSharper抱怨

本文关键字:ReSharper 抱怨 方法 扩展 检查 Guid | 更新日期: 2023-09-27 18:27:17

我创建了一个扩展方法来避免像下面的"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。当然,我可以用注释来抑制警告或更改重新锐化选项,但这两个选项都不是好的选择。如果我必须到处注释代码,那么它往往会破坏最初使代码更干净的目的。如果我改变重拍选项,那就太疯狂了。

我想知道是否有更好的选择。有没有一种方法可以"告诉"重拍者它是"好的",而不必到处注释代码或禁用检查?

要检查空Guid的扩展方法?让ReSharper抱怨

您可以通过合同注释"告知"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的总体合同。

我想有时你不得不忽略一些ReSharper警告。或者使用项目设置并将其设置为提示(例如)。但这很烦人。如果你在团队项目中工作,我不想怀疑任何ReSharper警告。