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

本文关键字:方法 优先于 泛型方法 扩展 什么 | 更新日期: 2023-09-27 17:59:56

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

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

简短回答:

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

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