为什么编译器在我验证 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);
}
}
我刚刚启用了 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);
}
}