CA1004和异常/错误处理帮助

时间:2012-07-04 10:42:18

标签: c# generics exception-handling code-analysis

CA1004: Generic methods should provide type parameter

public static void IfNullAndNullsAreIllegalThenThrow<T>(object value)
{
    if (value == null && !(default(T) == null))
        throw new ArgumentException("Nulls are not allowed for this object.");
}

我在网上发现了这种方法,说实话这非常有用。但是,它违反了CA1004规则。我不确定是否有更好的方法来设计方法而不违反规则。


样本用法:

public class SomeClass<T>
{
    public void SomeMethod(object obj)
    {
        // Ensure the actual object is not null if it shouldn't be.
        ThrowHelper.IfNullAndNullsAreIllegalThenThrow<T>(obj);

        // ...
    }
}

2 个答案:

答案 0 :(得分:2)

CA1004警告您无法从方法的签名推断泛型类型参数。基本上,这意味着你只能这样称呼它:

Something obj = GetSomething();
IfNullAndNullsAreIllegalThenThrow<Something>(obj);

另一方面,如果重新定义方法使其参数类型为T,则可以从传递的对象推断出泛型类型参数:

public static void IfNullAndNullsAreIllegalThenThrow<T>(T value)
{
    if (value == null && !(default(T) == null))
        throw new ArgumentException("Nulls are not allowed for this object.");
}

所以你可以写一下:

Something obj = GetSomething();
IfNullAndNullsAreIllegalThenThrow(obj);

答案 1 :(得分:2)

这看起来像一个仅在内部使用的辅助方法。将其设为internal而不是public,警告应该消失。