Як ініціалізувати список рядків (Список <рядок>) з багатьма значеннями рядків


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

149
Я не думаю, що є вагома причина для ініціалізації масиву рядків для створення цього об’єкта. Усі, хто шукає, будь ласка, використовуйте одну з інших відповідей.
Роберт Сміт

2
@Unsliced ​​та @Padel мають правильніші відповіді. Не потрібно переходити до іншого, newякщо ви ініціалізуєтесь{ }
Дон Чедл

Для CL + CI це так:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot чому? тому що виділення а new String[]не є ефективним?
Ділан Ченскі,

8
@DylanChensky Я б сказав, як загальне правило, робити все зайве - неефективно. Зрозуміло, цей один екземпляр може не бути великою справою, але уявіть, чи ваш код вбитий подібними предметами. Це може суттєво змінити ситуацію, особливо якщо мова йде про використання пам'яті.
Роберт Сміт

556

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

List<string> optionList = new List<string>
            { "AdditionalCardPersonAdressType", /* rest of elements */ };

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Колекція ініціалізаторів"
Lucero

Ви маєте на увазі конкретну версію .NET / C #? Наскільки я знаю цю роботу з версії 3.5 і пізніше. Не знаю про 2.0, тому що я не користувався ним певний час ...
Padel

1
asp.net 2.0 btw Я отримую помилку після {-> Помилка 7 Новий вираз вимагає () або [] після типу
Bilgin Kılıç

4
У версії 2.0 ви повинні використовувати його як це: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Зверніть увагу , що ()тут: new List<string>().
Padel

3
Це мовна функція C # 3 і не має нічого спільного з версією рамки, яку ви використовуєте. Якщо ви все ще використовуєте Visual Studio 2005, ви не зможете користуватися цією функцією.
Філ Ган

145

Ви справді не задавали питання, але код повинен бути

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

тобто немає списку () після списку.


Помилка 7 Новий вираз вимагає () або [] після типу
Bilgin Kılıç

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[]- команда додавання у прийнятій відповіді, якої можна уникнути.
Сухой

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

Таким чином, якщо ви приймаєте значення з IO, ви можете додати його до динамічно виділеного списку.


2

Перемістіть круглі дужки так:

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

0

Одним із цікавих особливостей є те, що ініціалізатор списку працює чудово і з користувацькими класами: вам просто потрібно реалізувати інтерфейс IEnumerable та мати метод, який називається Додати .

Так, наприклад, якщо у вас є спеціальний клас на зразок цього:

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
Будь ласка, додайте пояснення до своєї відповіді
mechnicov

Вибачте, але питання стосується ініціалізації списку з кількома значеннями. Це ініціалізує рядок, а потім додає значення, але не той самий випадок.
c-chavez

-8

Ось як би ви це зробили.

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

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

using System.Collections.Generic;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.