.NET 6 中 CA1062 的泛型非空验证程序

Generic not-null validator for CA1062 in .NET 6

提问人:user246392 提问时间:7/29/2023 更新时间:7/31/2023 访问量:27

问:

我有一个泛型方法,可以确保 an 不是 null 或空。IEnumerable

public static void IsNotNullOrEmpty<T>(IEnumerable<T> enumerable)
{
    if (enumerable == null || !enumerable.Any())
        throw new Exception();
}

在 中,我想通过设置 将此方法注册为用于代码分析的非 null 验证器。对于非泛型方法,我可以将其设置为:.editorconfigdotnet_code_quality.CA1062.null_check_validation_methods

dotnet_code_quality.CA1062.null_check_validation_methods = Namespace.Class.Method(ParameterType)

对于通用验证器来说,这是如何做到的?

C# .NET 代码分析 编辑器配置

评论

0赞 Dmitry Bychenko 7/29/2023
旁注:使用泛型时,尽量避免多次传递(先进入例程,然后进入例程):这可能会导致多个数据库查询、性能不佳的文件读取和数据不一致。IEnumerable<T>Any
0赞 Dmitry Bychenko 7/29/2023
旁注:和空是不同的错误;我建议为它们抛出不同的异常:和空nullif (enumerable is null) throw new ArgumentNullException(nameof(enumerable));ArgumentOutOfRangeExceptionenumerable

答:

0赞 Mad hatter 7/31/2023 #1

我知道这不会完全回答您的问题,这只是一种解决方法,但是从您的方法中删除泛型呢?

public static void IsNotNullOrEmpty(IEnumerable enumerable)
{
    if (enumerable == null)
        throw new Exception();

    var iterator = enumerable.GetEnumerator();
    var empty = !iterator.MoveNext();

    if (empty)
        throw new Exception();
}