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

一方、引数が型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 に答える