C# 제네릭 유형 추론의 한계
C#의 유형 추론 메커니즘은 일반적으로 제네릭 메서드의 제네릭 매개변수를 지능적으로 추론할 수 있습니다. 그러나 다음 예와 같이 경우에 따라 유형 추론이 실패할 수 있습니다.
<code class="language-csharp">interface IQuery<TResult> { } interface IQueryProcessor { TResult Process<TQuery, TResult>(TQuery query) where TQuery : IQuery<TResult>; } class SomeQuery : IQuery<string> { }</code>
위 코드에서 SomeQuery
인스턴스를 사용하여 IQueryProcessor
의 Process
메서드를 호출하면 컴파일러가 올바른 일반 매개변수를 추론할 수 없습니다. 매개변수를 명시적으로 지정하면 이 문제가 해결됩니다.
<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>
추론 실패 이유
초기 가정과 달리 제약 조건만으로는 유형 추론에 충분하지 않습니다. C#의 형식 유추는 전적으로 매개 변수와 해당 형식 매개 변수 형식을 기반으로 합니다. 제공된 매개변수 유형이 SomeQuery
(IQuery<string>
구현)이므로 컴파일러는 일반 매개변수가 TQuery = SomeQuery
및 TResult = string
이어야 한다고 자동으로 추론할 수 없습니다.
Eric Lippert는 "제약조건은 서명의 일부가 아닙니다"라는 기사에서 (https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d.
위 내용은 인터페이스 제약 조건으로 인해 C# 일반 유형 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!