为啥对 C# 数组使用“新”语法?

Posted

技术标签:

【中文标题】为啥对 C# 数组使用“新”语法?【英文标题】:Why use the "new" syntax for a C# array?为什么对 C# 数组使用“新”语法? 【发布时间】:2021-03-22 18:28:09 【问题描述】:

我从this question 看到,在 C# 中初始化数组有四种允许的方式。取自已接受的答案:

string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[]  "A", "B" ; // creates populated array of length 2
string[] array =  "A" , "B" ; // creates populated array of length 2
string[] array = new[]  "A", "B" ; // created populated array of length 2

链接的答案表明,除了第三个之外,您还可以使用var 关键字使上述表达式更简洁:

var array = new string[2]; // creates array of length 2, default values
var array = new string[]  "A", "B" ; // creates populated array of length 2
string[] array =  "A" , "B" ; // creates populated array of length 2
var array = new[]  "A", "B" ; // created populated array of length 2

我的问题是:您为什么希望对数组使用 new 语法?使用 var array = new string[] "A", "B" 代替 string[] array = "A" , "B" 是否有任何性能优势?

【问题讨论】:

也许我不知道哪些数据会添加到我的数组中。 string[] array = "A" , "B" ; 仍然是using new under the hood 在你的例子中,没有优势,这就是他们做出改变的原因,在没有new的情况下初始化它。 通常当一种语言有多种方法来实现相同的目标时,更简单的形式会在后面出现。不要指望 性能 差异,而只是 开发人员生产力 差异。 这并不是真正的优势/劣势,首先是new,然后是更新的c#版本,开发人员想,为什么我们不应该从数组初始化中删除new关键字(为了简单/代码更少),然后他们将其删除。就是这样。 【参考方案1】:

因为new 你可以指定数组类型,即你有这个代码

var array = new[]  1, 3, 5 

这将是 int,但你希望它是 byte 的数组,所以你只能用 new 来做。你也可以将数组声明为类字段string[] array,在构造函数的某处对其进行初始化,所以你只会看到array = "A", "B" ,这不清楚

【讨论】:

是的,但正如我所说,int[] 和同一个数组的新声明可以在完全不同的代码位置,你没有涵盖这个例子——假设你在开头定义了你的数组该文件和您的构造函数位于第 10000 行。 你“根本”无法确定这个问题的答案。因为原因可能因情况和代码而异

以上是关于为啥对 C# 数组使用“新”语法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好

调用方法并将返回值分配给数组时,为啥C#在调用方法时使用数组引用?

C# stringbuilder为啥高效

C# Excel SQL语法问题 为啥union 可以用?INTERSECT不能用?谢谢,请指教。

来自 C# 的 mingw DLL:为啥我必须覆盖新/删除?

为啥使用“新”会导致内存泄漏?