Можно сказать, что инициализаторы коллекции связаны с Linq, поскольку вы можете поблагодарить Linq за то, что функция превратила ее в C # 3 . В случае, если что-то случится со связанным вопросом, полезный текст будет
Целевая задача, мотивированная типичными сценариями использования для сбора
инициализаторы должны были выполнить инициализацию существующих типов коллекций
возможно в синтаксисе выражения, чтобы инициализаторы коллекции могли
быть встроенным в понимание запросов или преобразованным в деревья выражений.
Каждый другой сценарий имел более низкий приоритет; функция существует вообще
потому что это помогает заставить LINQ работать.
-Эрик Липперт
Они полезны в контексте Linq, потому что они дают вам возможность писать вещи, как в примере ниже
var query = from foo in foos
select new Bar
{
ValueList = new List<string> { foo.A, foo.B, foo.C }
};
Где вы можете создать запрос, который проецирует данный foo
в Bar
со списком значений свойств foo. Без такой поддержки инициализатора вы не могли бы создать такой запрос (хотя вы могли бы превратить ValueList в массив статической длины и получить нечто подобное).
Но, подобно инициализаторам объектов и другим функциям, которые являются новыми для C # 3+, многие функции, вдохновленные или добавленные специально для обеспечения работы Linq, без сомнения, полезны в коде, который вообще не имеет ничего общего с Linq, и не требуют Linq для работы (через директиву using или ссылку на DLL). Инициализаторы, в конечном счете, являются не более чем синтаксическим сахаром, который компилятор превратит в более длинный код, который вам пришлось бы писать самостоятельно в более ранних языковых версиях.