#c#
#c#
Вопрос:
Я понятия не имею, как искать этот вопрос; простите меня, если это излишне.
Итак, у меня есть такой код:
textBox1.InputScope = new InputScope { Names = { _Scope } };
Свойство Names имеет тип IList
Мой код добавляет элемент в список или создает новый список?
Что делает эта дополнительная фигурная скобка?
Ответ №1:
Это инициализатор коллекции, но он не создает новую коллекцию — он просто добавляет к существующей. Он используется как часть инициализатора-значения инициализатора-члена в инициализаторе объекта. Это эквивалент:
InputScope tmp = new InputScope();
tmp.Names.Add(_Scope);
textBox1.InputScope = tmp;
См. Раздел 7.6.10.3 спецификации C # 4 для получения дополнительной информации.
Комментарии:
1. Это похоже на трюк с двойными фигурными скобками в Java за вычетом ужасающих последствий анонимного класса?
2. @G_H: Несколько … легче говорить об этом только с точки зрения того, что он на самом деле делает в C #, а не о том, как его можно плохо эмулировать в Java 🙂
3. @Джон, тогда почему это не
var _List = new List<int> { 1, 2, 3 }; _List = { 4, 5, 6 };
работает? Потому что это можно сделать только один раз?4. @JerryNixon: инициализаторы коллекции могут отображаться только как часть выражений создания объекта. Вы все равно можете это сделать
_List = new List<int> { 1, 2, 3 }
.5. @Джон, надеюсь, не слишком не по теме. Существует ли синтаксис добавления более одного за раз для перечислимых, который выполнял бы что-то вроде этого синтаксиса там? Что-то вроде _List.AddRange({ 4, 5, 6});? Я полностью понимаю, почему это не работает. Но что-нибудь подобное?
Ответ №2:
Это инициализатор коллекции. Это позволяет вам добавлять элементы в Names
коллекцию.
Ответ №3:
new InputScope { // indicates an object-initializer for InputScope using
// the default constructor
Names = { // indicates an in-place usage of a collection-initializer
_Scope // adds _Scope to Names
} // ends the collection-initializer
}; // ends the object-initializer
т.е.
var tmp = new InputScope();
tmp.Names.Add(_Scope);
textBox1.InputScope = tmp;
Ответ №4:
Первый набор фигурных скобок — это инициализатор объекта. Второй набор — это список имен (коллекция).
Комментарии:
1. Отредактировано в соответствии с документацией — как массивы, так и коллекции (я перечисляю здесь ) поддерживают инициализацию объекта одинаково. Я предположил, что это массив. Спасибо за разъяснения!