Generics 値型?

Genericも真面目に勉強しないとです。

引数の値がDBNull.Valueだったら、nullを返すようなメソッドを書いてみたけど、

public static Nullable<T> ConvTDBNullToNull<T>(object o)
{
if (o is DBNull) return null;
return (T)o;
}

エラーが出てコンパイルできませんでした。

型 'T' は、ジェネリック型のパラメータ 'T'、またはメソッド 'System.Nullable<T>' として使用するために、Null 非許容の値型でなければなりません

値型以外では、適応しないことをコンパイラに教えてあげればよさそうなんですが、どうするんだろう。

<T extends ValueType>みたいなことができるのかな。

追記

この辺かな。

http://msdn2.microsoft.com/ja-jp/library/d5x73970(VS.80).aspx

http://www.atmarkit.co.jp/fdotnet/special/generics01/generics01_03.html

public static Nullable<T> ConvTDBNullToNull<T>(object o)
where T : struct
{
if (o is DBNull) return null;
return (T)o;
}

エラーは出なくなった。(他の大きな修正中なので動作確認できてないですが)

でも、structという指定で、値型の指定の意味になるんだろうか。

たぶんさらに追記する。

2件のコメント

  • 相変わらずの研鑽ぶりに脱帽です。
    さすが先生…
    今はJAVAは離れてVBっ子に戻ってしまいましたが、また機会があれば勉強したいと思います。
    頑張ってください☆

    今の会社に希望の光は感じられません…w

  • 今は「VB6っ子」だっけ?
    .net2.0なら↑の話関係してますよ。
    > 頑張ってください☆
    お互いさまでしょ?
    #「研鑽」なんて言葉しらなかった。読めないし。gooに教えてもらいました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください