Инициализация дженерика. Список в C#

Вы можете использовать тег для внешних URL-адресов,

<a href='https://domain.extension/external-without-params'>external</a>

, но также вы можете предоставить такой компонент:

<Route path='/external' component={() => { window.location = 'https://domain.extension/external-without-params'; return null;} }/>
46
задан Félix LD 20 August 2015 в 16:57
поделиться

7 ответов

Это называется коллекцией инициализатор . Он вызывает конструктор без параметров, а затем вызывает Add:

List<int> tmp = new List<int>();
tmp.Add(1);
tmp.Add(2);
tmp.Add(3);
List<int> intList = tmp;

Требования для типа:

  • Он реализует IEnumerable
  • Он имеет перегрузки Add , которые подходят для аргумента типы вы поставляете.
65
ответ дан Jon Skeet 26 November 2019 в 20:29
поделиться

На самом деле используется метод .Add . Это означает, что он вызывает . Добавьте для каждого элемента в скобках внутри конструктора.

0
ответ дан Alexander Kahoun 26 November 2019 в 20:29
поделиться

Читать Инициализаторы объектов и коллекций (Руководство по программированию в C #) . По сути, это можно сделать с каждым пользовательским типом, являющимся списком (реализует IEnumerable).

7
ответ дан Peter Mortensen 26 November 2019 в 20:29
поделиться

Они называются инициализаторами коллекции (см. Также здесь ), и то, как они работают, заключается в поиске метода Add () , который может делать ставки. Он вызывает Add () для каждого целого числа, которое есть в ваших фигурных скобках.

Поиск метода Add () является чистой магией компилятора. Трудно найти метод с таким именем.

4
ответ дан mqp 26 November 2019 в 20:29
поделиться

Имя, которое вы ищите - «Инициализатор коллекции». Он работает под капотом, ища метод с именем Add для типа коллекции и вызывая его для каждого указанного вами значения.

Подробнее: Инициализаторы объектов и коллекций (Руководство по программированию в C #)

2
ответ дан MayogaX 26 November 2019 в 20:29
поделиться

Я считаю, что это ярлык для метода .Add. Я никогда не пытался переопределить это, поэтому я не знаю, возможно ли это.

1
ответ дан Matt Grande 26 November 2019 в 20:29
поделиться

Насколько я понимаю, добавление элементов с помощью инициализации объекта ищет метод Add. Итак, так как List будет иметь void Add (int), он будет работать.

Чтобы использовать его в своем классе, просто добавьте

class CustomClass { 
   public void Add(int num) {
      // Your code here
   }
}

Ваш класс должен реализовывать IEnumerable, как указывал Халлгрим.

0
ответ дан Peter Mortensen 26 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: