题
如果没有初始化,如何为数组赋值?
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将是相同的。
你可以这样做,因为它是允许的,不需要分两步这样做,所以这是速记。考虑一下糖。
不隶属于 StackOverflow