使用和不使用 new 运算符的数组初始化差异

Difference in array initialization with and without new operator

我看过 All possible C# array initialization syntaxes,其中显示了几种不同的初始化数组的方法。

与使用 new 的常规调用创建的实例相比,以下初始化创建的实例是否在某些方面有所不同?

初始化:

string[] strArray = {"one","two","three"}; 

相比于string[] strArray = new String[] {"one","two","three"};

它是一种语法糖。编译器对此进行转换:

string[] strArray = {"one","two","three"};

为此:

string[] expr_07 = new string[] {
            "one",
            "two",
            "three"
        };

以上输出使用 Roslyn C# 编译器。

你不能初始化不存在的东西。所以是的,确实创建了一个新实例,其方式与您 had 编写 new 运算符的方式完全相同。这只是语言为您在声明数组的同时初始化数组提供的一种便利,这样您就不会 被迫 将其写出(在执行时在一个单独的语句中, new 运算符是必需的,因为编译器不能假设您事先没有为变量分配数组引用 - 在单独的语句中您可以逃脱的最低限度是 strArray = new[] {...};).