c# - 为什么 List<T> 没有采用 params 参数的构造函数?

标签 c# collections parameters

我知道我可以使用集合初始化程序来初始化列表:

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 的新列表?

剧透,如果您不确定编译器将如何解释它:

它将被视为容量。如果Tint 以外的任何东西,它将被视为单个元素。如果您指定参数名称— 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/

相关文章:

collections - Rust 有集合特性吗?

c++ - 尽可能传递 const 引用参数

vb.net - 如何将子过程作为参数传递 VB.NET

c# - 软件公司保护知识产权(代码)的方法

java - 是否有一个插入订单保留 Set 也实现了 List?

c# - 如何将泛型类型导出到 COM?类型库导出器在签名中遇到泛型类型实例

java - JUnit - Java - 如何使用文件列表作为参数测试 void 方法

Javascript:setTimeout 和引用中的函数

c# - 将 C++ int 数组编码到 C#

c# - 如何为数组数据成员定义 get 和 set?