Инициализация списка в классе для доступности из функций
Я хочу инициализировать список со значениями инициализатора коллекции в классе, чтобы сделать его доступным для использования из отдельных функций:
public Form1()
{
InitializeComponent();
}
List<string> list = new List<string>() {"one", "two", "three"};
Чем отличается список в скобках и без, какой подходит для этого случая:
List<string> list = new List<string> {"one", "two", "three"};
2 ответа
Призвание
List<string> list = new List<string> {"one", "two", "three"};
это просто сокращение и неявно вызывает конструктор по умолчанию:
List<string> list = new List<string>() {"one", "two", "three"};
Также смотрите сгенерированный код IL, он такой же:
List<string> list = new List<string>() {"one"};
List<string> list2 = new List<string> {"one"};
будет выглядеть так:
IL_0001: newobj instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
IL_0006: stloc.2
IL_0007: ldloc.2
IL_0008: ldstr "one"
IL_000d: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
IL_0012: nop
IL_0013: ldloc.2
IL_0014: stloc.0
IL_0015: newobj instance void class [mscorlib]System.Collections.Generic.List`1<string>::.ctor()
IL_001a: stloc.3
IL_001b: ldloc.3
IL_001c: ldstr "one"
IL_0021: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<string>::Add(!0)
IL_0026: nop
IL_0027: ldloc.3
IL_0028: stloc.1
Вы видите, что {}
нотация является просто синтаксическим сахаром, который сначала вызывает конструктор по умолчанию, а затем добавляет каждый элемент внутри {}
с использованием List<T>.Add()
метод. Итак, ваш код эквивалентен:
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");
В ()
скобки (конструктор) вы можете передать некоторые конкретные параметры, такие как начальный размер списка и т. д. При использовании { }
в скобках вы просто инициализируете список некоторыми начальными значениями.
В вашем случае не имеет значения, какой вы будете использовать, оба будут иметь схожий эффект, так как вы используете вызов конструктора по умолчанию.