更新 : 2007 年 11 月
エラー メッセージ
型 '型 1' はジェネリック型またはメソッド '名前' 内で型パラメータ '名前' として使用できません。Null 許容型 '型 1' は、'型 2' の制約を満たしていません。
Null 許容型は、対応する Null 非許容型とは異なります。両者の間には暗黙の参照変換または ID 変換は存在しません。Null 許容型のボックス化変換は、ジェネリック型の制約を満たしません。次の例では、1 番目の型パラメータが Nullable<int> で、2 番目の型パラメータが System.Int32 です。
このエラーを解決するには
制約を削除します。
次の例では、2 番目の型引数を int? または object にします。
使用例
次のコードは CS0312 を生成します。
// cs0312.cs
class Program
{
static void MTyVar<T, U>() where T : U { }
static int Main()
{
MTyVar<int?, int>(); // CS0312
return 1;
}
}
Null 許容型と Null 非許容型は異なりますが、Null 許容型値と Null 非許容型値との間でさまざまな種類の変換を実行できます。