コンパイラ エラー CS0312
型 'type1' をジェネリック型の型パラメーター 'name' またはメソッド 'name' として使用することはできません。 Null 許容型 'type1' が 'type2' の制約を満たしていません。
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 非許容の値の間では、さまざまな種類の変換を実行できます。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。