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);
// ...
}
}
答案 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
,警告应该消失。