【发布时间】:2018-05-24 06:29:40
【问题描述】:
在.NET框架中,有一些函数可以同时接受IEnumerable和Array参数,或者params Array参数。
既然IEnumerable 可以满足任何提供Array 的调用代码,为什么要实现它?
另一方面,params Array 不会替换 IEnumerable,但是,它会替换 Array.
所以在我看来,只需要IEnumerable 和params Array。
问题:这背后的框架(如 .NET)的意图是什么?如果被调用者使用反射,是否向下兼容?
示例 1:
File.WriteAllLines(string path, string[] contents);
--> File.WriteAllLines(string path, IEnumerable<string> contents);
示例 2:
Path.Combine(string path1, string path2);
Path.Combine(string path1, string path2, string path3);
Path.Combine(string path1, string path2, string path3, string path4);
--> Path.Combine(params string[] paths);
【问题讨论】:
-
params string[]与string[]没有什么不同。当您使用params时,编译器允许您使用语法糖。所以new[] {a,b,c}和a,b,c会被编译成同一个东西。
标签: c# .net frameworks