Как инициализировать список строк (List <string>) со многими строковыми значениями

358

Как можно инициализировать (с помощью инициализатора C #) список строк? Я попытался с примером ниже, но он не работает.

List<string> optionList = new List<string>
{
    "AdditionalCardPersonAddressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
}();
Билгин Килич
источник
здесь приведен пример многомерного списка в ответе на этот вопрос stackoverflow.com/questions/34473358/…
barlop

Ответы:

464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });
Zenzer
источник
150
Я не думаю, что есть веская причина для инициализации массива строк здесь, чтобы создать этот объект. Любой, кто ищет, пожалуйста, используйте один из других ответов.
Роберт Смит
2
У @Unsliced ​​и @Padel есть более правильные ответы. Не нужно передавать newчто-либо еще, если вы инициализируете{ }
Don Cheadle
Для C ++ CLI это похоже на:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei
@ Боброт почему? потому что распределение new String[]не эффективно?
Дилан Ченски
8
@DylanChensky Я бы сказал, как правило, делать что-то ненужное неэффективно. Конечно, этот экземпляр может не иметь большого значения, но представьте, что в вашем коде много таких вещей. Это может иметь большое значение в целом, особенно когда речь идет об использовании памяти.
Роберт Смит
557

Просто удалите ()в конце.

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };
Падель
источник
4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Инициализаторы коллекций"
Lucero
Вы имеете в виду конкретную версию .NET / C #? Насколько я знаю эту работу с v3.5 и позже. Не знаю насчет 2.0, потому что я давно его не использовал ...
Падел
1
asp.net 2.0 Кстати, я получаю сообщение об ошибке после {-> Ошибка 7 Новое выражение требует () или [] после типа
Bilgin Kılıç
4
В версии 2.0 вы должны использовать его как это: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Обратите внимание , что ()здесь: new List<string>().
Падел
3
Это особенность языка C # 3 и не имеет ничего общего с версией используемой вами платформы. Если вы все еще используете Visual Studio 2005, вы не сможете использовать эту функцию.
Фил Ган
145

Вы на самом деле не задавали вопрос, но код должен быть

List<string> optionList = new List<string> { "string1", "string2", ..., "stringN"}; 

т.е. нет трейлинг () после списка.

Unsliced
источник
Ошибка 7 Новое выражение требует () или [] после типа
Билгин Килич
2
@blgnklc, потому что вы используете C # 2, который не поддерживает эту функцию.
Фил Ган
25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

Выше двух самых коротких путей, пожалуйста, смотрите https://www.dotnetperls.com/list

Sujoy
источник
1
Это предпочтительнее принятого ответа? Кажется, проще, без необходимости промежуточногоstring[]
Ehtesh Choudhury
var animals = new List<string> { "bird", "dog" };не было предложено в принятом ответе. Далее (new string[]идет команда сложения в принятом ответе, которой можно избежать.
Sujoy
14

Ваша функция просто отлично, но не работает, потому что вы ставите ()после последнего }. Если вы переместитесь ()наверх, то рядом с new List<string>()ошибкой остановитесь.

Образец ниже:

List<string> optionList = new List<string>()
{
    "AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"
};
Марчелло Мелло
источник
7

Это то, как вы инициализируете, а также вы можете использовать List.Add (), если вы хотите сделать его более динамичным.

List<string> optionList = new List<string> {"AdditionalCardPersonAdressType"};
optionList.Add("AutomaticRaiseCreditLimit");
optionList.Add("CardDeliveryTimeWeekDay");

Таким образом, если вы берете значения из ввода-вывода, вы можете добавить их в динамически распределяемый список.

Энье Аарон Ши
источник
2

Переместить круглые скобки так:

var optionList = new List<string>(){"AdditionalCardPersonAdressType","AutomaticRaiseCreditLimit","CardDeliveryTimeWeekDay"};
Андрей Козлов
источник
0

Одна действительно крутая особенность в том, что инициализатор списка прекрасно работает и с пользовательскими классами: вам нужно просто реализовать интерфейс IEnumerable и иметь метод под названием Add .

Так, например, если у вас есть собственный класс, подобный этому:

class MyCustomCollection : System.Collections.IEnumerable
{
    List<string> _items = new List<string>();

    public void Add(string item)
    {
        _items.Add(item);
    }

    public IEnumerator GetEnumerator()
    {
        return _items.GetEnumerator();
    }
}

это будет работать:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}
adospace
источник
-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");
Радж
источник
3
Пожалуйста, добавьте некоторые пояснения к вашему ответу
Мечников
Извините, но вопрос об инициализации списка с несколькими значениями. Это инициализирует строку, а затем добавляет значения, а не тот же случай.
С-Чавес
-8

Вот как бы вы это сделали.

List <string> list1 = new List <string>();

Не забудьте добавить

using System.Collections.Generic;

Мухаммед Али
источник