如果没有初始化,如何为数组赋值?

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
有帮助吗?

解决方案

这只是语法糖。

此:

string[] s = {"all","in","all"};

编译为与:

相同的代码
string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

请注意,在分配了所有元素之前,不会将数组引用分配给 s 。在我们宣布 new 变量的特殊情况下,这并不重要,但在这种情况下它会有所不同:

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

对象和集合初始值设定项也是如此 - 变量仅在结尾处分配。

其他提示

可以在没有初始化的情况下声明数组变量。

检查一下 http://msdn.microsoft.com/en-我们/库/ 0a7fscd0%28VS.71%29.aspx

您不是“为数组指定值”。您正在初始化类型“引用到数组”的变量。初始化它的值是对通过使用短数组初始化程序语法 {...} 创建的数组的引用。虽然只允许在数组类型变量的初始值设定项中使用,但它完全等同于 new T [] {...} ,其中 T 是从变量类型推导出来的

我想你想知道为什么

 string[] s={"all","in","all"};
当你希望首先像这样初始化数组时

起作用:

string[] s = new string[];

string[] s = new string[] {"all","in","all"};

答案只是编译魔术。编译器根据初始化知道有多大的数组,所以它只是在幕后为你做。与 var 关键字非常相似,重点是限制您需要输入的冗余信息量。

{" all",""," all"} 部分是初始化。 new string [] 部分可以省略,因为花括号和字符串是简写符号。在单维数组上查看 MSDN

string[] s = new string[] { "all","in","all"};

及其简写版

string[] s = {"all","in","all"};

是一回事。有关更多信息,请参阅 MSDN (初始化阵列部分)细节。

你不需要C#3或更高版本中的新字符串[]部分 - 这很好用

string[] s = { "all","in","all"};

这只是编译器更聪明的一个案例,并且解决了你的意思 - 后端IL将是相同的。

你可以这样做,因为它是允许的,不需要分两步这样做,所以这是速记。考虑一下糖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top