public enum EnumTest { EnumEntry } public class TestClass { public string FunctionMember(string s,EnumTest t = EnumTest.EnumEntry) { return "normal"; } public string FunctionMember<T>(T t) { return "Generic"; } } class Program { static void Main(string[] args) { TestClass t = new TestClass(); Console.WriteLine(t.FunctionMember("a")); } }
这将打印“通用”.删除,枚举t = EnumTest.EnumEntry使其打印“正常”.
而标准似乎很清楚,从14.4.2.2更好的功能成员第一个鉴别器应用是:
>如果MP和MQ之一是非通用的,而另一个是通用的,则非泛型更好.
我错过了一些或编译错误?
解决方法
您使用一个参数调用该方法.只有一个方法有一个参数,一个是泛型的.那就是选择的那个.
只有当它没有找到匹配的方法时,才会看到具有可选参数的其他方法.
参考文献:
> C# 4.0 Specification,最后一段在21.4:
As a tie breaker rule,a function member for which all arguments where explicitly given is better than one for which default values were supplied in lieu of explicit arguments.
If two candidates are judged to be equally good,preference goes to a candidate that does not have optional parameters for which arguments were omitted in the call. This is a consequence of a general preference in overload resolution for candidates that have fewer parameters.
> The C# Language Specification,“7.5.3.2更好的功能成员”一章:
Parameter lists for each of the candidate function members are constructed in the following way:
它继续这样:
Given an argument list A with a set of argument expressions { E1,E2,…,EN } and two applicable function members MP and MQ with parameter types { P1,P2,PN } and { Q1,Q2,QN } […]
原文地址:https://www.jb51.cc/csharp/94036.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。