为什么编译器在我验证 public 可为 null 的参数后仍然抛出 CA1062?

Why compiller stills trhowing CA1062 once I validated public nullable parameter?

我刚刚启用了 FxCop 代码分析器,并且在修复警告时无法修复此警告:

CA1062:验证 public 方法的参数

        public static string SanitizeFileName(this string fileName)
        {
            if (fileName is null) throw new ArgumentNullException(nameof(fileName));

            foreach (char c in System.IO.Path.GetInvalidFileNameChars())
            {
                fileName = fileName.Replace(c, '_');
            }

            return fileName;
        }

Compiller still throwing warning CA1062 访问文件名

提前致谢

CA1062 警告是一个设计警告(CA1062: Validate arguments of public methods),一个外部可见的方法在没有验证该参数是否为 null 的情况下取消引用它的一个引用参数,它会显示此警告。

我已经用你的代码在我这边重现了这个问题,这个问题似乎与 is 运算符有关,在将 is 运算符更改为“==”之后, 警告消失。

    public static string SanitizeFileName(this string fileName)
    {
        if (fileName == null) throw new ArgumentNullException(nameof(fileName));

        foreach (char c in System.IO.Path.GetInvalidFileNameChars())
        {
            fileName = fileName.Replace(c, '_');
        }

        return fileName;
    }

此外,根据CA1062警告中的示例代码,如果要检查字符串是否为空,可以使用以下代码:

    public void Validate(string input)
    {
        if (input == null)
        {
            throw new ArgumentNullException(nameof(input));
        }
        if (input.Length != 0)
        {
            Console.WriteLine(input);
        }
    }