2016-07-20 15 views
2

変数からデフォルト値を取得できますか? item変数は、汎用タイプTである変数からデフォルト()の値を見つけよう

item.GetType != default(item.GetType().GetProperty("Value").PropertyType) 
item.GetType != default(typeof(item)); 
item.GetType != default(item.GetType()); 
+0

を投げてから.Equals()を防止しているのですか? –

+0

正しい型を返すように見えるが、デフォルト(item.GetType())のコンパイラでネストされているときコンパイラはエラーを返す "itemは変数ですが型のように使われます" –

+0

@JamesDudleyその必要はありません。 。 'default(T)'を使用してください – user3185569

答えて

3

ので方法について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

+0

それは動作します!タイプパラメータの制約に慣れていないので、今のところ2番目の例を守ってください。私は何か読んでいるように見えます! –

関連する問題