使用和不使用 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[] {...};
).
我看过 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[] {...};
).