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