我见过人们使用几种不同的初始化数组的方式:
string[] Meal = new string[]{"Roast beef", "Salami", "Turkey", "Ham", "Pastrami"};
Run Code Online (Sandbox Code Playgroud)
或者另一种方式,也称为初始化:
string[] Meats = {"Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
Run Code Online (Sandbox Code Playgroud)
什么是最好的方式,两种方式(包括内存分配)之间的主要区别是什么?
Dzm*_*voi 16
两种情况都没有区别.编译器生成相同的字节码(newarrOpCode):
public static void Main()
{
string[] Meal = new string[] { "Roast beef", "Salami", "Turkey", "Ham", "Pastrami"};
string[] Meats = { "Roast beef", "Salami", "Turkey", "Ham", "Pastrami" };
}
Run Code Online (Sandbox Code Playgroud)
MSIL:
.entrypoint
// Code size 100 (0x64)
.maxstack 3
.locals init ([0] string[] Meal,
[1] string[] Meats,
[2] string[] CS$0$0000)
IL_0000: nop
IL_0001: ldc.i4.5
IL_0002: newarr [mscorlib]System.String
IL_0007: stloc.2
IL_0008: ldloc.2
IL_0009: ldc.i4.0
IL_000a: ldstr "Roast beef"
IL_000f: stelem.ref
IL_0010: ldloc.2
IL_0011: ldc.i4.1
IL_0012: ldstr "Salami"
IL_0017: stelem.ref
IL_0018: ldloc.2
IL_0019: ldc.i4.2
IL_001a: ldstr "Turkey"
IL_001f: stelem.ref
IL_0020: ldloc.2
IL_0021: ldc.i4.3
IL_0022: ldstr "Ham"
IL_0027: stelem.ref
IL_0028: ldloc.2
IL_0029: ldc.i4.4
IL_002a: ldstr "Pastrami"
IL_002f: stelem.ref
IL_0030: ldloc.2
IL_0031: stloc.0
IL_0032: ldc.i4.5
IL_0033: newarr [mscorlib]System.String
IL_0038: stloc.2
IL_0039: ldloc.2
IL_003a: ldc.i4.0
IL_003b: ldstr "Roast beef"
IL_0040: stelem.ref
IL_0041: ldloc.2
IL_0042: ldc.i4.1
IL_0043: ldstr "Salami"
IL_0048: stelem.ref
IL_0049: ldloc.2
IL_004a: ldc.i4.2
IL_004b: ldstr "Turkey"
IL_0050: stelem.ref
IL_0051: ldloc.2
IL_0052: ldc.i4.3
IL_0053: ldstr "Ham"
IL_0058: stelem.ref
IL_0059: ldloc.2
IL_005a: ldc.i4.4
IL_005b: ldstr "Pastrami"
IL_0060: stelem.ref
IL_0061: ldloc.2
IL_0062: stloc.1
IL_0063: ret
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |