Синтаксис инициализатора и синтаксис конструктора без параметров - PullRequest
0 голосов
/ 14 декабря 2018

Существует два альтернативных стиля создания нового пустого объекта в виде списка:

var list = new SomeListType<int>();

или

var list = new SomeListType<int> { };

Первый основан на том, что базовый конструктор может настроитьобъект, второй, по-видимому, также неявно полагается на конструктор, но также указывает пустой список инициализаторов.

(Список инициализаторов оставлен нарочно пустым, скажем, если он кажется более читабельным или более понятным в некоторыхконтекст.)

Есть ли практическое или функциональное различие между этими двумя подходами?

(Примечание - SomeListType может быть любым, что может быть построенокак это - например, стандартный List<T> или некоторый пользовательский класс. Использование int только для примера).

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Даже сгенерированный код IL будет одинаковым для обеих опций:

newobj instance void class Namespace.SomeListType`1<int32>::.ctor() 

Так что функциональной разницы нет вообще.

0 голосов
/ 14 декабря 2018

Две написанные вами строки будут скомпилированы одинаково.Разница в том, что во второй версии вы можете инициализировать список, добавляя элементы в фигурные скобки (при условии, что ваши списки реализуют интерфейс ICollection<T> или предоставляют соответствующий метод Add:

var list = new SomeListType<int> { 1, 2, 3, 4 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...