【发布时间】:2017-09-02 16:03:25
【问题描述】:
我有一堂课是这样开始的:
namespace Tools.Builders
{
internal abstract class Builder
{
[SuppressMessage("Microsoft.Maintainability", "CA1502")]
private static readonly Dictionary<string, Func<ILogger, Builder>> _builders =
new Dictionary<string, Func<ILogger, Builder>>
{
{ "1", (x) => {return new BuilderType1(x);} },
{ "2", (x) => {return new BuilderType2(x);} },
{ "3", (x) => {return new BuilderType3(x);} },
{ "4", (x) => {return new BuilderType4(x);} },
{ "5", (x) => {return new BuilderType5(x);} },
{ "6", (x) => {return new BuilderType6(x);} },
{ "7", (x) => {return new BuilderType7(x);} },
{ "8", (x) => {return new BuilderType8(x);} },
{ "9", (x) => {return new BuilderType9(x);} },
};
protected ILogger _logger;
protected Builder(ILogger logger)
{
_logger = logger;
}
//...
这会导致 CA1502 警告,形式为“Builder.Builder() 的圈复杂度为...”(这是此类初始化程序的一个已知问题)。但是我的问题是我无法抑制警告。我尝试将 SuppressMessageAttribute 放在代码中的各种不同位置,但它只是被忽略了。有什么建议吗?
【问题讨论】:
-
Docs: “必须定义预处理器符号“CODE_ANALYSIS”才能使此属性生效。缺少预处理器符号会导致属性不被应用。”
-
嗯,我试过了,但没有任何区别。还是谢谢。
-
我不确定这里有什么意义。有人建议我尝试#pragma warning(disable: 1502),但该评论似乎已经消失了。正如 buffjape 的链接指出的那样,这将是针对编译器警告而不是 CA 警告,所以没有多大帮助。同时,我对实际问题没有进一步了解。
标签: c# code-analysis maintainability