이 코드가 있습니다.
public T? Foo<T>()
where T : class?
{
return null;
}
논리적이고 예상되는 오류를 제공합니다.
nullable 형식 매개 변수는 값 형식 또는 nullable이 아닌 참조 형식으로 알려 져야합니다. '클래스', '구조'또는 유형 제약 조건을 추가하는 것을 고려하십시오.
이제 제약 조건을 하나 더 추가합니다.
public T? Foo<T>()
where T : class?, IDisposable // Could be any interface I guess
{
return null;
}
이제 흥미롭게도 충분한 오류가 사라졌습니다. 정말 나에게 보이지만 인터페이스이기 때문에 우리는 충돌 제약이 non-nullalbe
동안 class?
이다.
여기에 뭔가 빠졌거나 컴파일러에 문제가 있습니까?
제네릭 형식 제약 조건 where T : IDisposable
은 " T
이 null이 아니어야하며 IDisposable
" 를 구현해야 함을 의미 합니다 . nullability가 다른 여러 제네릭 형식 제약 조건이있는 경우 제약 조건 전체는 모든 제약 조건이 nullable 인 경우에만 nullable입니다.
따라서 class?
nullable이라는 사실 IDisposable
은 그렇지 않은 사실에 의해 무시됩니다 .
당신은 필요합니다 where T : class?, IDisposable?
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다