第一个数组条目与第二个数组条目有何不同

问题描述 投票:0回答:5

我无法理解第一种情况和第二种情况下数组初始化声明之间的区别

int[] array = new int[3] { 1, 2, 3 };
int[] secondArray = { 1, 2, 3 };

他们似乎做同样的事情,也许他们的工作方式不同?

c# arrays visual-studio console-application
5个回答
0
投票

显示的两条显示线的结果没有差异:

int[] array = new int[3] { 1, 2, 3 };
int[] secondArray = { 1, 2, 3 };

但是,

new int[n] {...} 
语法和
{...}
之间存在实际差异:

  1. 隐式类型不可用于替代数组初始值设定项:

    var a1 = new int[3] { 1, 2, 3 }; // OK
    var a2 = { 1, 2, 3 }; // Error: Cannot initialize an implicitly-typed variable with an array initializer
    
    // BTW. You can omit the size
    var a3 = new int[] { 1, 2, 3 }; // OK
    
  2. 使用替代语法,您无法指定大小,它总是被推断出来。

    var a1 = new int[100]; // Array with 100 elements (all 0)
    int[] a2 = { }; // Array with no elements
    


0
投票

两行编译后的代码没有区别。


0
投票

第二个只是一个捷径。两个语句具有相同的结果。较短的变体在 C# 的早期版本中不可用。


0
投票

这两种数组初始化语法在编译器如何将其转换为 IL 方面没有区别(您可以在 sharplab.io 上使用它),并且与以下语法相同:

int[] thirdArray = new int[] { 1, 2, 3 };

唯一的区别是当您使用已经声明的变量时,即您可以使用第一个和第三个为现有数组变量分配新值,但不能使用第二个:

int[] arr;
arr = new int[3] { 1, 2, 3 };   // works
// arr = { 1, 2, 3 };           // won't compile
arr = new int[] { 1, 2, 3 };    // works

0
投票

第一种情况明确使用 3 作为数组大小,第二种情况,大小是推断的。

如果您不想显式初始化值,这可能会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.