C# 泛型方法重载机制 private static readonly List data=new List(); 私有静态void ProcessData(IEnumerable data){} 私有静态void ProcessData(IEnumerable data){} 私有静态void ProcessData(IList数据){} 私有静态void ProcessData(IList数据){} 静态void Main(字符串[]参数) { 过程数据(数据); } 称为哪个重载 为什么? 如何在没有显式强制转换的情况下调用其他的

C# 泛型方法重载机制 private static readonly List data=new List(); 私有静态void ProcessData(IEnumerable data){} 私有静态void ProcessData(IEnumerable data){} 私有静态void ProcessData(IList数据){} 私有静态void ProcessData(IList数据){} 静态void Main(字符串[]参数) { 过程数据(数据); } 称为哪个重载 为什么? 如何在没有显式强制转换的情况下调用其他的,c#,.net,generics,interface,C#,.net,Generics,Interface,首先,请看John Skeet的回答,为什么不允许使用列表调用重载3和重载4: 既然3和4不存在,那么选择2的原因是因为编译器寻找“最佳匹配”:Eric Lippert在这个SO答案中介绍了其中的一些内容: 但基本上结果是2是最合适的(IList比IEnumerable更“强大”)。这是一个测验问题吗?你试过运行这个代码吗?你试过做研究吗?你的主要函数中的数据是什么?@Ego看第一行代码。如果这些是重载方法,那么我希望所有方法都在做相同的事情,那么你应该只有一个方法“private stat

首先,请看John Skeet的回答,为什么不允许使用
列表调用重载3和重载4

既然3和4不存在,那么选择2的原因是因为编译器寻找“最佳匹配”:Eric Lippert在这个SO答案中介绍了其中的一些内容:


但基本上结果是2是最合适的(
IList
IEnumerable
更“强大”)。

这是一个测验问题吗?你试过运行这个代码吗?你试过做研究吗?你的主要函数中的数据是什么?@Ego看第一行代码。如果这些是重载方法,那么我希望所有方法都在做相同的事情,那么你应该只有一个方法“private static void ProcessData(IEnumerable data){}”,这是一个项目的实际代码,我刚刚添加了几个重载用于研究。VisualStudio显示将调用IEnumerable重载。我不知道为什么。我想可能是第1次或第4次过载,但事实并非如此。
        private static readonly List<List<T>> data = new List<List<T>>();

        private static void ProcessData(IEnumerable<IEnumerable<T>> data) { }

        private static void ProcessData(IEnumerable<IList<T>> data) { }

        private static void ProcessData(IList<IEnumerable<T>> data) { }

        private static void ProcessData(IList<IList<T>> data) { }

        static void Main(string[] args)
        {
            ProcessData(data);
        }