我刚刚看到一段代码,它使用通用列表类以下列方式实例化自身:
var foo = new List<string>(){"hello", "goodbye"};
构造函数后面的大括号尤其令人困惑。有点让我想起了
var bar = new string[]{"hi","bye"};
但在过去我会一直使用:
var foo = new List<string>(new []{"hello", "goodbye"});
有人有解释第一行代码语法的链接吗?我什至不知道从哪里开始谷歌搜索。
最佳答案
正如其他人所指出的,那是一个集合初始值设定项。您可能不知道的一些其他功能已添加到 C# 3:
- 如果参数列表为空,集合初始化构造函数可以省略括号。所以
new List<int> { 10, 20, 30 }
很好。 - 用数组初始值设定项初始化的数组在某些情况下可能会省略类型。例如,
var myInts = new[] { 10, 20, 30};
推断myInts
是int[]
. - 可以使用类似的对象初始化器 语法来初始化对象。
var c = new Customer() { Name = "Fred" };
与var temp = new Customer(); temp.Name = "Fred"; var c = temp;
相同
这些特性的意义在于(1)将更多以前需要语句的东西变成只需要表达式的东西; LINQ 喜欢表达式,并且 (2) 支持更丰富的类型推断,尤其是对于匿名类型。
最后:关于集合初始值设定项所需的一些答案和评论存在一些混淆。要与集合初始值设定项一起使用,该类型必须 (1) 实现 IEnumerable
(这样我们就知道它是一个集合)并且 (2) 有一个 Add
方法(以便我们可以向其中添加内容。)
见
http://blogs.msdn.com/b/madst/archive/2006/10/10/what-is-a-collection_3f00_.aspx
有关功能设计的其他想法。
关于c# - 使用 new 后跟大括号内的列表的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436276/