2

CA1004:泛型方法应提供类型参数

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);

        // ...
    }
}
4

2 回答 2

2

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

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

另一方面,如果您重新定义方法,使其参数为 type 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);
于 2012-07-04T10:48:33.053 回答
2

这看起来像一个仅在内部使用的辅助方法。internal代替它public,警告应该消失。

于 2012-07-04T11:03:44.630 回答