2016-07-09 7 views
0

ここではタイプ「文字列のエラーT1「」が「可能System.Nullable <T>」ジェネリック型またはメソッドのパラメータ「T」としてそれを使用するために非NULL可能値型でなければならないタイプ

を取得IAM (文字列、System.Web.UI.WebControls.GridView、INT)GetDataKeyValue 『ジェネリック型またはメソッドの『T1」パラメータとしてそれを使用するために、非null許容値型でなければなりません』』

String Process = GetDataKeyValue<String>(gvTargetRate, RowIndex, "Process"); 

ここではエラーが発生しています

タイプ 'T1'は、iを使用するためにnull値ではない値タイプでなければなりませんジェネリック型またはメソッドのパラメータ「T」としてt「の可能System.Nullable」

private Nullable<T> GetDataKeyValue<T>(GridView gv, int RowIndex, T column) 
{ 
    if (column == null) 
     return default(T); 

    return (T)gv.DataKeys[RowIndex].Values[column]; 
} 
+1

これはコンパイラエラーを取得していない場合でも、何か賢明なようにしていません。列の型が、その列に格納されている値の型に何らかの形で関係するのはなぜですか? – hvd

+0

それはそのようなインデックスでなければなりません。 –

答えて

0

あなたはどのタイプのうちNullable<>を作成することはできません。コンパイラから指示されるように、値型に対してのみ行うことができます。このメソッドはどのタイプにも限定されていないので、オブジェクトを渡すことはできません。

this question and its answerで説明されているように、実際にはできません。

ところで、Tは定義上null可能な型ではないため、default(T)は値型の場合はnull以外の値になります。 stringはオブジェクト上にあるため、Nullable<T>を使用せずにnullにすることができます。

0

Nullable型では、Tがnullでもかまいません(たとえば、intまたはDateTime)。 stringのような参照型は、既にnullでもかまいません。 Nullableのようなものには許されないようにすることは許されません。

more info.

関連する問題