编程语言
首页 > 编程语言> > c# – 有什么方法可以使扩展方法优先于泛型方法?

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

作者:互联网

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

解决方法:

简答:不

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

If the resulting set of candidate methods is empty, then further processing along the following steps are abandoned, and instead an attempt is made to process the invocation as an extension method invocation (§7.6.5.2). If this fails, then no applicable methods exist, and a binding-time error occurs.

标签:c,overload-resolution,generics
来源: https://codeday.me/bug/20190623/1273538.html