영어로 읽기

다음을 통해 공유


컴파일러 오류 CS0313

제네릭 형식 또는 메서드 'type2'에서 'type1' 형식을 형식 매개 변수 'parameter name'으로 사용할 수 없습니다. nullable 형식 'type1'이 'type2'의 제약 조건을 만족하지 않습니다. nullable 형식은 인터페이스 제약 조건을 충족할 수 없습니다.

null 허용 값 형식은 null을 허용하지 않는 해당 값 형식과 동등하지 않습니다. 아래에 있는 예제에서 ImplStructBaseInterface 제약 조건을 충족하지만 ImplStruct?Nullable<ImplStruct> 에서 BaseInterface를 구현하지 않기 때문에 충족하지 않습니다.

이 오류를 해결하려면

  1. 아래에 있는 코드를 예제로 사용할 경우 한 가지 해결 방법은 ImplStruct 호출의 첫 번째 형식 인수로 일반 TestMethod를 지정하는 것입니다. 그런 다음 return 문에서 TestMethod 의 nullable 버전을 만들도록 Implstruct 를 수정합니다.

    return new Nullable<T>(t);  
    

예시

다음 코드에서는 CS0313을 생성합니다.

// 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()  
    { }  
}  

참고 항목