有什么方法可以使扩展方法优先于泛型方法吗?

时间:2015-06-27 06:33:14

标签: c# generics overload-resolution

在.NET中,如果某个类包含方法Foo<T>(T t)(无约束)和方法Foo(字符串s),则调用Foo("test")会调用Foo接受{ {1}}。这一切都很好,除非string重载是一种扩展方法,在这种情况下,总是调用泛型版本。这个问题是否有一些解决方法,或者我运气不好?

1 个答案:

答案 0 :(得分:4)

简短回答:

C# 5.0 Language Specification的第163页中,我们可以看到在对Method Group(一组重载方法)进行了所有重载解析后,找不到合适的候选者时,编译器会尝试搜索适用的扩展方法。这意味着所有时髦的东西,如泛型类型推断将优先于扩展方法。引用:

  

如果生成的候选方法集合为空,则放弃沿着以下步骤的进一步处理,而是尝试将调用作为扩展方法调用进行处理(第7.6.5.2节)。如果失败,则不存在适用的方法,并发生绑定时错误。