C#学习教程:重载、泛型类型推断和“params”关键字假设我有以下方法:publicstaticvoidDoSomething(IEnumerableitems){//不管怎样//用于调试现在,我知道这个方法通常用很少的显式参数调用,所以为了方便我添加了这个重载:参数T[]项)");现在我尝试调用这些方法:varitems=newList{"foo","bar"};做某事(项目);DoSomething("foo","bar");但是在这两种情况下,params的权重都被称为load。我希望在List案例中调用IEnumerable重载,因为它看起来更匹配(至少对我而言)。这种行为正常吗?谁能解释一下?我在MSDN文档中找不到任何关于它的明确信息……这里涉及的重载解析规则是什么?C#3.0规范的第7.4.3节是相关的。基本上参数数组被扩展,所以你比较:publicstaticvoidDoSomething(Titem)和publicstaticvoidDoSomething(IEnumerableitem)第一个匹配的T被推断为列表,第二个匹配的T被推断为字符串。现在考虑涉及参数类型参数的转换——首先是列表到列表;在第二个中,它是ListtoIEnumerable。根据7.4.3.4中的规则,第一次转换优于第二次转换。违反直觉的一点是类型推断。如果你把它从等式中去掉,它会像你预期的那样工作:varitems=newList{"foo","bar"};做某事(项目);DoSomething("foo","bar");此时,每次调用中只有一个适用的函数成员。以上就是C#学习教程的全部内容:重载、泛型类型推断和params关键字分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
