Alp*_*der 5 c# generics overload-resolution
在 .NET 中,如果有一个具有方法Foo<T>(T t)
(无约束)和方法 Foo(string s) 的类,则调用会Foo("test")
调用Foo
接受string
. 这一切都很好,除非string
重载是一个扩展方法,在这种情况下总是调用泛型版本。是否有解决此问题的方法,还是我不走运?
简短回答:不
\n\n在C# 5.0 语言规范的第 163 页中,我们可以看到,在尝试了所有重载解析之后Method Group
,如果没有找到合适的候选方法,编译器将尝试搜索适用的扩展方法。这意味着所有时髦的东西(例如泛型类型推断)将优先于扩展方法。去引用:
\n\n如果候选方法的结果集为空,则放弃沿以下步骤进行的进一步处理,而是尝试将调用作为扩展方法调用进行处理 (\xc2\xa77.6.5.2)。如果失败,则不存在适用的方法,并且会发生绑定时错误。
\n