CA1004和异常/错误处理援助
CA1004: Generic methods should provide type parameterCA1004和异常/错误处理援助
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);
// ...
}
}
这看起来像一个辅助方法,它仅在内部使用。使它internal
而不是public
和警告应该消失。
CA1004
警告你,泛型类型参数不能从方法签名推断。基本上,这意味着你只能调用它是这样的:如果重新定义的方法,以便它的参数是T
类型的
Something obj = GetSomething();
IfNullAndNullsAreIllegalThenThrow<Something>(obj);
在另一方面,则一般类型参数可以从物体推断通过:
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);
我认为改变方法的签名会使它无用。 – Henrik
问题是我需要的参数是类型的对象,因为那是进入另一种方法进行检查的对象的类型。 –
@亨利克,你能详细解释一下为什么吗?我试图考虑所有角度和恕我直言,'T'和'价值'在'if'条件下仍然有意义...... –
但是,如果您想在一个或多个程序集中使用这些辅助方法,这不是解决方案。所以你需要复制代码。 –