ので方法についてdefault(T)
:
T defaultValue = default(T);
foreach (T item in v)
{
if (item != defaultValue)
{
}
}
2を比較する!=
を使用するには
public static int CountNonDefault<T>(this T[] v)
{
int count = 0;
foreach (var item in v)
{
if (item.GetType != default(typeof(item)))
{
count++;
}
}
return count;
}
は私が無駄に以下試してみましたタイプT
のオブジェクトの場合は、次のようにメソッドを変更する必要があります。
public static int CountNonDefault<T>(this T[] v) : where T : EqualityComparer<T>
それはあなたのためのオプションがない場合は、この代替に従うことができます:
T defaultValue = default(T);
foreach (T item in v)
{
if(item == null && defaultValue == null || (item.Equals(defaultValue)))
{
}
}
これはitem.GetTypeは何を返さないNullReferenceException
を投げてから
.Equals()
を防止しているのですか? –正しい型を返すように見えるが、デフォルト(item.GetType())のコンパイラでネストされているときコンパイラはエラーを返す "itemは変数ですが型のように使われます" –
@JamesDudleyその必要はありません。 。 'default(T)'を使用してください – user3185569