C# C语言中的数组初始化#

C# C语言中的数组初始化#,c#,arrays,C#,Arrays,在C#中,数组可以通过以下语法初始化 string[]arr = {"text1","text2"}; // this works 为什么下面的方法不起作用 string[]arr1; arr1={"phrase1","phrase2"};//Does not compile. 根据C#规范,第二种语法是错误的: 有关如何初始化数组的更多示例,请查看该链接: 根据C#规范,第二种语法是错误的: 有关如何初始化数组的更多示例,请查看该链接: 这是因为只有在第一次初始化数组变量时才允许使

在C#中,数组可以通过以下语法初始化

string[]arr = {"text1","text2"}; // this works
为什么下面的方法不起作用

string[]arr1;
arr1={"phrase1","phrase2"};//Does not compile. 

根据C#规范,第二种语法是错误的:

有关如何初始化数组的更多示例,请查看该链接:

根据C#规范,第二种语法是错误的:

有关如何初始化数组的更多示例,请查看该链接:

这是因为只有在第一次初始化数组变量时才允许使用这种特殊语法(我个人甚至不知道它存在)

如果以后要将新数组分配给变量,则需要说
new

arr = new string[] { "text1", "text2" };
您还可以说just
new[]
,编译器将为您计算出类型

这是因为只有在第一次初始化数组变量时才允许使用这种特殊语法(我个人甚至不知道它存在)

如果以后要将新数组分配给变量,则需要说
new

arr = new string[] { "text1", "text2" };

您也可以只说
new[]
,编译器将为您确定类型。

这都是关于分配内存的。 第一个缩写为:

string[]arr = new string[]{"text1","text2"};
因此,编译器在同一语句中使用
new
关键字知道要分配的元素数

第二个是错误的语法。 如果要分两步执行此操作:

string[]arr1; // defines array(pointer)
arr1=new string[]{"phrase1","phrase2"}; // again when `new` is used for dynamic memory allocation, the size is available.

这都是关于分配内存的。 第一个缩写为:

string[]arr = new string[]{"text1","text2"};
因此,编译器在同一语句中使用
new
关键字知道要分配的元素数

第二个是错误的语法。 如果要分两步执行此操作:

string[]arr1; // defines array(pointer)
arr1=new string[]{"phrase1","phrase2"}; // again when `new` is used for dynamic memory allocation, the size is available.

因为在第二个代码段中,您并没有真正初始化变量,而是试图赋值。第一种语法是特殊的。第一种语法实际上意味着
新字符串[]{…}
。这种语法只是编译器的糖。它不理解如何执行第二个语法,因此它不起作用。就这么简单。因为在第二个代码段中,您并没有真正初始化变量,而是试图赋值。第一种语法是特殊的。第一种语法实际上意味着
新字符串[]{…}
。这种语法只是编译器的糖。它不理解如何执行第二个语法,因此它不起作用。就这么简单。在第一个示例中,Resharper会将
新字符串[]
标记为不必要(如果您已包含它),因为这种速记符号。在第一个示例中,Resharper会将
新字符串[]
标记为不必要(如果您已包含它),由于这种速记法,您不能将字符串指定给int!新的int[]{“phrase1”,“phrase2”};您现在已修复它…:)不能将字符串指定给int!新的int[]{“phrase1”,“phrase2”};您现在已修复它…:)+0:虽然链接看起来合理,但您应该在文章中内联外部链接的摘要。也就是说,在这种情况下,引用说明书中的一句或两句话会使答案更好。本地(SO)链接更合适,但提供摘要+链接而不仅仅是链接(即,如果其他帖子被删除,大多数人将看不到它)仍然是一种好的做法。+0:虽然链接看起来合理,但您应该在帖子中内联外部链接的摘要。也就是说,在这种情况下,引用说明书中的一句或两句话会使答案更好。本地(SO)链接更合适,但提供摘要+链接,而不仅仅是链接(即,如果其他帖子被删除,大多数人将看不到它)仍然是一种良好的做法。