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


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.