我知道我可以使用集合初始化程序来初始化列表:
var list = new List<string>
{
"test string 1",
"test string 2"
};
如果我记得,这会在内部为每个项目调用 Add。
为什么 List<T>
没有构造函数?这需要 params T[] items
?
var list = new List<string>("test string 1", "test string 2");
最佳答案
真正的原因是设计者根本不觉得这一点语法糖的好处值得付出努力实现,或者它可能会引起一些困惑。
如果你想创建一个 List<int>
有一个小问题.这是什么意思?
var list = new List<int>(10);
这是一个容量为 10 的新列表,还是包含单个元素 10 的新列表?
剧透,如果您不确定编译器将如何解释它:
它将被视为容量。如果
T
是int
以外的任何东西,它将被视为单个元素。如果您指定参数名称—List<int>(items:10)
,它也将被视为单个项目。
无论如何,你没有理由不能写:
var list = new List<string>(new[] { "test string 1", "test string 2" });
如果有一个提供params
的构造函数,这正是编译器会做的事情。参数,这确实比集合初始值设定项更有效。必须输入一些额外的字符来完成这个在宏伟的计划中确实不是什么大问题。
关于c# - 为什么 List<T> 没有采用 params 参数的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870215/