Почему я получаю ошибку в следующем объявлении?C# Function Chaining
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
Ошибка: Невозможно преобразовать тип void в список?
Почему я получаю ошибку в следующем объявлении?C# Function Chaining
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
Ошибка: Невозможно преобразовать тип void в список?
Потому что функция AddRange не возвращает значение. Вы, возможно, потребуется выполнить в два этапа:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
AddRange не возвращает список он добавляет объекты (в отличие от StringBuilder). Вам нужно сделать что-то вроде этого:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
AddRange() объявлен как:
public void AddRange(object[]);
Он не возвращает список.
Поскольку AddRange изменяет указанный список вместо того, чтобы возвращать новый список с добавленными элементами. Чтобы указать это, он возвращает void
.
Попробуйте это:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
Если вы хотите создать новый список, не изменяя первоначальный список, вы можете использовать LINQ:
List<int> intrs = new List<int>();
List<int> newIntrs = intrs.Union(new int[]{1,2,3,45}).ToList();
// intrs is unchanged
Вы можете также использовать коллекцию инициализатор (в предположении, C# 3.0+).
List<int> intrs = new List<int> { 1, 2, 3, 45 };
Редактируйте 280Z28: Это работает для всего с Add
методом. Скобка конструктора является необязательной - если вы хотите передать предмет конструктору, например, емкость, вы можете сделать это с помощью List<int>(capacity)
, а не только List<int>
, написанного выше.
Вот ссылка MSDN для получения более подробной информации о Object and Collection Initializers.
Dictionary<string, string> map = new Dictionary<string, string>()
{
{ "a", "first" },
{ "b", "second" }
};
Кстати в C# 3.x (не уверен, 2,0), вы можете сделать что-либо из
List<int> intrs = new List<int>{1,2,3,45};
List<int> intrs = new []{1,2,3,45}.ToList(); // with Linq extensions
Помимо других ответов, вы можете добавить свой собственный метод расширения, который добавит диапазон и возврат список (а не то, что это хорошая практика).
Кстати, если вы уже объявили intrs, вы могли бы сделать это с помощью скобок:
(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });
Однако, мне нравится синтаксис инициализации лучше.
Хотя другие уже упоминали, что AddRange не возвращает значение, на основе выборок, заданных для альтернатив, следует также помнить, что конструктор List также принимает IEnumerable of T, а также ранее упомянутый код это .NET 3.5+
Например:
List<int> intrs = new List<int>(new int[]{2,3,5,7});
Существует еще один способ.
List<int> intrs = new List<int>
{
1,
2,
3,
45
};
Да, я знаю, что это не было полностью связано с цепочкой методов. –
Поскольку AddRange не возвращает список. –