首页 >后端开发 >C++ >为什么 C# 泛型类型推断因接口约束而失败?

为什么 C# 泛型类型推断因接口约束而失败?

DDD
DDD原创
2025-01-23 09:46:101028浏览

Why Does C# Generic Type Inference Fail with Interface Constraints?

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实例调用IQueryProcessorProcess方法时,编译器无法推断出正确的泛型参数。显式指定参数可以解决这个问题:

<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>

推断失败的原因

与最初的设想相反,仅靠约束不足以进行类型推断。C#的类型推断完全基于参数及其对应的形式参数类型。由于提供的参数类型是SomeQuery(它实现了IQuery<string>),编译器无法自动推断出泛型参数应为TQuery = SomeQueryTResult = string

Eric Lippert在文章“约束不是签名的一部分”(https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d

以上是为什么 C# 泛型类型推断因接口约束而失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn