コンパイラ エラー CS0313
型 'type1' をジェネリック型またはメソッド 'type2' で型パラメーター 'parameter name' として使用できません。 Null 許容型 'type1' が 'type2' の制約を満たしていません。 Null 許容型では、インターフェイス制約を満たすことはできません。
Null 許容値型は、Null 非許容の対応する型と同じではありません。 次の例では、 ImplStruct
は BaseInterface
制約を満たしていますが、 ImplStruct?
は Nullable<ImplStruct>
によって BaseInterface
が実装されていないため満たしていません。
次の例のコードを使用する場合、1 つの解決方法は、
ImplStruct
の呼び出しの最初の型引数として通常のTestMethod
を指定することです。 次に、TestMethod
を変更して、その return ステートメントでImplstruct
の Null 許容バージョンを作成します。C#return new Nullable<T>(t);
次のコードでは CS0313 が生成されます。
C#
// cs0313.cs
public interface BaseInterface { }
public struct ImplStruct : BaseInterface { }
public class TestClass
{
public T? TestMethod<T, U>(T t) where T : struct, U
{
return t;
}
}
public class NullableTest
{
public static void Run()
{
TestClass tc = new TestClass();
tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313
}
public static void Main()
{ }
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。