英語で読む

次の方法で共有


コンパイラ エラー CS0313

型 'type1' をジェネリック型またはメソッド 'type2' で型パラメーター 'parameter name' として使用できません。 Null 許容型 'type1' が 'type2' の制約を満たしていません。 Null 許容型では、インターフェイス制約を満たすことはできません。

Null 許容値型は、Null 非許容の対応する型と同じではありません。 次の例では、 ImplStructBaseInterface 制約を満たしていますが、 ImplStruct?Nullable<ImplStruct> によって BaseInterfaceが実装されていないため満たしていません。

このエラーを解決するには

  1. 次の例のコードを使用する場合、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()  
    { }  
}  

関連項目