spa*_*r79 5 c# upgrade .net-6.0
我正在将我们的应用程序从 .NET 3.1 Core 升级到 .NET 6,并尝试使用新的ArgumentNullException.ThrowIfNull();
但在我们的代码中,我们不仅检查 null ,还检查其他内容。
if (anyParam == null)
{
throw new ArgumentNullException(nameof(anyParam));
}
if (string.IsNullOrEmpty(stringParam))
{
throw new ArgumentException(nameof(stringParam));
}
if (intParam <= 0)
{
throw new ArgumentException(nameof(intParam ));
}
if (listParam.Count == 0)
{
throw new ArgumentException(nameof(listParam));
}
Run Code Online (Sandbox Code Playgroud)
由于规则CA2208现在想要更改所有 ArgumentException 行,因此我们有很多这样的行,这将需要大量工作。
我想知道是否只能安全地替换第一个示例中的纯空检查,或者在不同参数类型的情况下检查什么。找不到正确的文档。
我想尽可能多地替换为:
ArgumentNullException.ThrowIfNull(anyParam);
Hei*_*nzi 12
您在这里混淆了两个完全不相关的问题:
第一个是将您的第一张支票替换为ArgumentNullException.ThrowIfNull. 当然,这是个好主意!从 .NET 7 开始,您还可以将第二个检查替换为ArgumentException.ThrowIfNullOrEmpty.
第二个问题是您的第二个、第三个和第四个检查已损坏,应该修复(这就是CA2208的目的): 的第一个参数是ArgumentNullException,paramName但 的第一个参数ArgumentException不是,而是。 paramNamemessage
例如,您的线路
if (intParam <= 0)
{
throw new ArgumentException(nameof(intParam));
}
Run Code Online (Sandbox Code Playgroud)
实际上应该是:
if (intParam <= 0)
{
throw new ArgumentException(nameof(intParam) + " must be a positive integer.");
}
Run Code Online (Sandbox Code Playgroud)
(或者,可选:)
if (intParam <= 0)
{
throw new ArgumentException(nameof(intParam) + " must be a positive integer.",
nameof(intParam));
}
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的,ArgumentOutOfRangeException对于此特定检查可能是更好的选择。但请注意,与ArgumentException的构造函数相反,ArgumentOutOfRangeException(如)首先ArgumentNullException采用参数名称,然后(可选)采用消息。即,您可以使用
if (intParam <= 0)
{
// yield a generic "out of range" exception message
throw new ArgumentOutOfRangeException(nameof(intParam));
}
Run Code Online (Sandbox Code Playgroud)
或者
if (intParam <= 0)
{
throw new ArgumentOutOfRangeException(nameof(intParam),
nameof(intParam) + " must be a positive integer.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4162 次 |
| 最近记录: |