如何通过#pragma警告禁用CA1814?

时间:2018-10-24 13:34:08

标签: c# warnings compiler-warnings suppress-warnings

我的背景:我的文件中有很多行会引起此警告(由于阵列大小相同,因此该特定警告对我而言毫无意义)。

为了排除一些晦涩的项目设置,我创建了一个简单的玩具示例。在这里,我使用规则集“ Microsoft All Rules”。以下仍然给我警告,包括CA1814:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
#pragma warning disable 1814 
            var test = new int[0,0,0];
            var b = new Banana();
#pragma warning restore 1814 
            return;
        }
    }

    class Banana : IDisposable
    {
        public void Dispose()
        {
            Console.WriteLine("What a waste");
        }
    }
}

Warnings

我不确定这是否有某种联系,但是即使存在所有这些错误,我也可以使用警告级别:4,将警告视为错误:“全部”来构建项目。

编辑:我也尝试了CA1814,而不只是1814

1 个答案:

答案 0 :(得分:1)

CS1814本身不是编译器警告;这是一个代码分析警告。您已在项目上启用了静态代码分析,并选择了所有规则。不过,您可能并不愿意关注所有这些内容,而这正是您所要面对的。

您可能想要自定义规则集。您可以通过以下两种方式之一进行操作:

  1. 使用SuppressMessage属性有选择地禁用警告
  2. Create a new set of rules基于“ Microsoft所有规则”集,并将其配置为不包括CS1814。

对于第一种方法,将以下属性添加到文件或方法的顶部:

[SuppressMessage("Microsoft.Performance", "CA1814:PreferJaggedArraysOverMultidimensional")]