C# 声明一个变量(作为新变量),然后初始化它和直接初始化它之间有什么区别?

C# 声明一个变量(作为新变量),然后初始化它和直接初始化它之间有什么区别?,c#,asp.net,.net,C#,Asp.net,.net,我见过人们使用几种不同的方法初始化阵列: string[] Meal = new string[]{"Roast beef", "Salami", "Turkey", "Ham", "Pastrami"}; 或另一种方式,也称为初始化,即: string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" }; 最好的方法是什么?两种方法(包括内存分配)之间的主要区别是什么?两种情况没有区别。编译器生成相同的字节码(n

我见过人们使用几种不同的方法初始化阵列:

string[] Meal = new string[]{"Roast beef", "Salami", "Turkey", "Ham", "Pastrami"};
或另一种方式,也称为初始化,即:

string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };

最好的方法是什么?两种方法(包括内存分配)之间的主要区别是什么?

两种情况没有区别。编译器生成相同的字节码(
newarr
OpCode):

MSIL:


这两者是相同的,并将产生相同的IL代码。第二种方法只是第一种方法的语法糖分。

这两种方法在编译代码中是等效的,请选择您认为最清晰或最容易阅读的方法。

请参阅。在这个特定场景中,它们都生成相同的编译代码和相同的结果。这两种语法之间的唯一区别是第二种语法只能在变量声明中使用,这意味着您不能使用它来更改现有变量的值。例如:

// Compiles fine
string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };

// Causes compilation error
Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };

// Also causes compilation error
string[] Meats2;
Meats2 = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
就个人而言,如果要显式声明变量的类型,我建议使用第二种语法进行变量声明,如下所示:

string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
如果您倾向于使用
var
关键字,我建议使用第一种语法,因为它可以使您更清楚地知道预期结果的类型(可读性),并强制编译器为您检查,如下所示:

var Meats = new string[]{"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };

一般来说,最好选择一种风格并保持一致。

(相当古老,但这里的语言并没有真正改变)甚至
var Meats={“烤牛肉”、“萨拉米”、“火鸡”、“火腿”、“熏牛肉”}
也一样。@SonerGönül:是的,我知道。你不能用第二种语法来更改现有变量的值,但你可以用第一种语法来更改。哇,这是非常描述性的@Dmitry,顺便说一句,我如何检查MSIL?使用MS Visual Studio包中的默认实用程序ILDASM:谢谢,这很有帮助。如果你投了反对票,请解释原因。我想知道我的答案哪里错了。
string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
var Meats = new string[]{"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };