3

我喜欢 Resharper,但有时它会给出不正确的警告,可能是因为 BCL 类型的内置注释是错误的。例如,在这段代码中:

private static string GetDescription(T value)
{
    Type type = typeof(T);
    string name = Enum.GetName(type, value);
    if (name != null)
    {
        ...

它给了我一个关于if声明的警告:“表达总是正确的”。但Enum.GetName可以返回 null:

string name = Enum.GetName(typeof(DayOfWeek), (DayOfWeek)42); // null

我认为这是因为[NotNull]Enum.GetName. 有没有办法解决这个问题,所以我没有收到警告?

注意:我使用的是 Resharper 5.1;也许这个问题在版本 6 中已修复,但我现在不愿意升级。

4

2 回答 2

6

好,我知道了。内置注释在 Resharper 安装目录(C:\Program Files (x86)\JetBrains\ReSharper\v5.1\Bin\ExternalAnnotations\在我的机器上)的 XML 文件中定义。解决方案是编辑相应的文件以删除或修复不正确的注释。

在 的情况下Enum.GetName,要更改的文件是mscorlib\mscorlib.[version].Contracts.xml。我刚刚评论了这个注释:

  <member name="M:System.Enum.GetName(System.Type,System.Object)">
    <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
  </member>

并重新启动 Visual Studio,现在警告消失了 :)

于 2012-04-21T00:04:45.503 回答
1

只是对托马斯答案的更新,他们似乎在过去几年中改变了一些事情。

对于 Resharper 8.2.3,上述文件现在位于:

C:\Users\YOUR_USER_NAME\AppData\Local\JetBrains\ReSharper\vAny\packages\ReSharper.ExternalAnnotations.8.2.3001\ReSharper\vAny\annotations\.NETFramework\mscorlib\...

因此,如果您尝试这样做,则可以搜索该路径(或向上搜索非mscorlib文件)。

于 2014-11-13T21:46:41.890 回答