c# - 使用 new 后跟大括号内的列表的语法是什么?

标签 c# syntax

我刚刚看到一段代码,它使用通用列表类以下列方式实例化自身:

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};推断 myIntsint[] .
  • 可以使用类似的对象初始化器 语法来初始化对象。 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/

相关文章:

c# - 使用 ReactJS SPA 在 .net Core 中进行身份验证

c# - SqlGeography 空间操作缓慢 - SQL Server 2016

c# - 将对象转换为对象数组

c++ - 与 C++ Exception throw 语句混淆

php - 为什么有些 php 文件不以右括号 "?>"结尾?

ruby - 使用<<时出现语法错误,但使用+ =时则没有

c# - 谁应该将 WPF/MVVM 中的 VIewModel 称为逻辑单元或 View ?

c# - 无法作为 href 访问条件 Razor 变量

vue.js - Volar(vscode扩展): line comment syntax in . vue文件模板部分错误

javascript - 在 OOP 中使用 "this.prototype"与外部 "Constructor.prototype"