컴파일러 오류 CS0313
제네릭 형식 또는 메서드 'type2'에서 'type1' 형식을 형식 매개 변수 'parameter name'으로 사용할 수 없습니다. nullable 형식 'type1'이 'type2'의 제약 조건을 만족하지 않습니다. nullable 형식은 인터페이스 제약 조건을 충족할 수 없습니다.
null 허용 값 형식은 null을 허용하지 않는 해당 값 형식과 동등하지 않습니다. 아래에 있는 예제에서 ImplStruct
는 BaseInterface
제약 조건을 충족하지만 ImplStruct?
는 Nullable<ImplStruct>
에서 BaseInterface
를 구현하지 않기 때문에 충족하지 않습니다.
아래에 있는 코드를 예제로 사용할 경우 한 가지 해결 방법은
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()
{ }
}
.NET 피드백
.NET은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.