私は次の関数の仕事をしたいと思い:もちろんdatarowフィールドをジェネリック型にキャストする方法はありますか?
T GetRowVal<T>(System.Data.DataRow dr, string fieldName)
{
var type=typeof(T);
var val = dr[fieldName];
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
if (val == DBNull.Value || val == null) return null;
return (T)val;
}
、それはそれは、この場合には許されるべきである場合でも、nullを返すように望んでいないTの種類に制約がありません。 この機能を修正するにはどうすればよいですか? (もし、もっと良い方法があれば教えてください)。
ノウハウについて、アプローチは、私が使用します。
T GetRowVal<T>(System.Data.DataRow dr, string fieldName)
{
var type=typeof(T);
var val = dr[fieldName];
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
if (val == DBNull.Value || val == null) return default(T);
return (T)val;
}
新しいソリューション:)
return dr.Field<T>(fieldName);
わからない、それはパフォーマンスの面で進歩して、おそらく見えますクリーナー。
実装はMSのGithub上で見つけることができます:
:
これは良い選択肢のようです:) – Jean