我可以"修复"错误的Resharper注释吗?

Tho*_*que 3 resharper annotations

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

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

它在if声明中给了我一个警告:"表达永远是真实的".但是Enum.GetName可以返回null:

string name = Enum.GetName(typeof(DayOfWeek), (DayOfWeek)42); // null
Run Code Online (Sandbox Code Playgroud)

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

注意:我正在使用Resharper 5.1; 也许这个问题在版本6中得到修复,但我现在不愿意升级.

Tho*_*que 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>
Run Code Online (Sandbox Code Playgroud)

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