为什么我不能在[SuppressMessage(...)]中使用常量和ReSharper?

时间:2017-06-20 12:16:29

标签: c# resharper

我想将抑制ReSharper警告所需的字符串作为常量放在一个类中,这样我就不需要将字符串全部放在一起并从查找所有引用函数中受益,以找出我抑制了多少次哪个规则。

public class Rules
{
  public const string ReSharper= "ReSharper";
  public const string InconsistentNaming = "InconsistentNaming";
}

按如下方式装饰我的成员

public class MyClass
{
  [SuppressMessage(Rules.ReSharper, Rules.InconsistentNaming)]
  protected uint v { get; }
}

让ReSharper仍然抱怨名字以小写字母开头的专家。只有在使用

归属成员时
[SuppressMessage("ReSharper", "InconsistentNaming")]

ReSharper警告消失。有没有办法让它在使用常数的上述庄园中工作?

1 个答案:

答案 0 :(得分:3)

ReSharper执行其分析,并根据源代码的语法报告警告。所以它专门寻找var menuItem = ((MenuItem)sender);"ReSharper"等形式的字符串标记。为了理解你的常量,它会对代码进行语义分析,例如通过确定{{{ 1}}当它发现它是一个字符串常量时它是什么值。

后一种分析速度要慢得多,会对ReSharpers分析的性能产生影响。所以它没有这样做,所以你必须指定文字字符串。