有什么办法可以让扩展方法优先于通用方法吗?

Alp*_*der 5 c# generics overload-resolution

在 .NET 中,如果有一个具有方法Foo<T>(T t)(无约束)和方法 Foo(string s) 的类,则调用会Foo("test")调用Foo接受string. 这一切都很好,除非string重载是一个扩展方法,在这种情况下总是调用泛型版本。是否有解决此问题的方法,还是我不走运?

Bas*_*Bas 4

简短回答:

\n\n

在C# 5.0 语言规范的第 163 页中,我们可以看到,在尝试了所有重载解析之后Method Group,如果没有找到合适的候选方法,编译器将尝试搜索适用的扩展方法。这意味着所有时髦的东西(例如泛型类型推断)将优先于扩展方法。去引用:

\n\n
\n

如果候选方法的结果集为空,则放弃沿以下步骤进行的进一步处理,而是尝试将调用作为扩展方法调用进行处理 (\xc2\xa77.6.5.2)。如果失败,则不存在适用的方法,并且会发生绑定时错误。

\n
\n