Как инициализировать список строк (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" });

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"}; 

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


Ошибка 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


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"
}

-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;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.