Birçok dize değeri içeren bir dize listesi (Liste <string>) nasıl başlatılır


358

Dizelerin bir listesini (C # başlatıcısıyla) başlatmak nasıl mümkün olabilir? Aşağıdaki örnekle denedim ama işe yaramıyor.

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

burada bu sorunun cevabında çok boyutlu bir liste için bir örnek var stackoverflow.com/questions/34473358/…
barlop 28:16

Yanıtlar:


464
List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

150
Bu nesneyi oluşturmak için burada bir dize dizisi başlatmak için iyi bir neden olduğunu sanmıyorum. Arayan herkes, lütfen diğer cevaplardan birini kullanın.
Robert Smith

2
@Ulicliced ​​ve @Padel daha doğru cevaplara sahip imo. new{ }
Don Cheadle

C ++ CLI için şöyle:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot neden? çünkü ayırmak new String[]verimli değildir?
Dylan Czenski

8
@DylanChensky Genel bir kural olarak söyleyebilirim, gereksiz bir şey yapmak verimsizdir. Kabul edersek, bu tek örnek çok önemli olmayabilir, ancak kodunuzun böyle öğelerle dolu olup olmadığını hayal edin. Özellikle bellek kullanımı söz konusu olduğunda genel olarak büyük bir fark yaratabilir.
Robert Smith

557

()Sonunda kaldırın .

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

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Koleksiyon başlatıcılar"
Lucero

.NET / C # 'ın belirli bir sürümüne mi başvuruyorsunuz? Bildiğim kadarıyla bu çalışma v3.5 ve sonrasında. 2.0 hakkında bilmiyorum çünkü bir süredir kullanmadım ...
Padel

1
asp.net 2.0 btw {-> Hata 7'den sonra hatayı alıyorum Yazımdan sonra yeni bir ifade gerektirir () veya []
Bilgin Kılıç

4
2.0 size bu gibi kullanmak gerekir: List<string> optionList = new List<string>() { "AdditionalCardPersonAdressType", /* rest of elements */ };. Not ()burada: new List<string>().
Padel

3
Bu bir C # 3 dil özelliğidir ve kullandığınız çerçevenin sürümü ile ilgisi yoktur. Hala Visual Studio 2005 kullanıyorsanız bu özelliği kullanamayacaksınız.
Phil Gan

145

Gerçekten bir soru sormadınız, ancak kod şu olmalıdır:

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

yani listeden sonra hiçbir iz () yok.


Hata 7 Yeni bir ifade
yazıldıktan

2
@blgnklc, çünkü bu özelliği desteklemeyen C # 2 kullanıyorsunuz.
Phil Gan

25
var animals = new List<string> { "bird", "dog" };
List<string> animals= new List<string> { "bird", "dog" };

İkisinin üstünde en kısa yollar, lütfen https://www.dotnetperls.com/list adresine bakın


1
Bu kabul edilen cevaptan daha mı tercih ediliyor? Bir ara string[]
ürüne

var animals = new List<string> { "bird", "dog" };kabul edilen cevapta önerilmedi. Ayrıca (new string[], kabul edilen cevapta önlenebilecek bir ekleme komutudur.
Sujoy

14

İşleviniz gayet iyi, ancak çalışmıyor çünkü ()sonuncuyu sonra koyuyorsunuz }. Hatayı ()hemen yanına taşırsanız new List<string>(), hata durur.

Aşağıdaki örnek:

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

7

Bu şekilde başlatılırsınız ve daha dinamik hale getirmek istiyorsanız List.Add () yöntemini de kullanabilirsiniz.

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

Bu şekilde, IO'dan değerler alıyorsanız, dinamik olarak ayrılmış bir listeye ekleyebilirsiniz.


2

Köşeli parantezleri aşağıdaki gibi hareket ettirin:

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

0

Gerçekten harika bir özellik, liste başlatıcısının özel sınıflarla da iyi çalıştığıdır: IEnumerable arabirimini uygulamanız ve Add adında bir yönteminiz var .

Örneğin, böyle bir özel sınıfınız varsa:

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

bu çalışacak:

var myTestCollection = new MyCustomCollection()
{
    "item1",
    "item2"
}

-1
List<string> animals= new List<string>();
animals.Add("dog");
animals.Add("tiger");

3
Lütfen cevabınıza biraz açıklama ekleyin
mechnicov

Maalesef soru, birden fazla değere sahip bir liste başlatmakla ilgili. Bu, dizeyi başlatır ve daha sonra aynı durumu değil, değerleri ekler.
c-chavez

-8

Bunu böyle yapardın.

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

Eklemeyi unutma

using System.Collections.Generic;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.