วิธีเริ่มต้นรายการสตริง (List <string>) ด้วยค่าสตริงจำนวนมาก


358

เป็นไปได้อย่างไรที่จะเริ่มต้น (กับ C # initializer) รายการสตริง? ฉันลองด้วยตัวอย่างด้านล่าง แต่มันไม่ทำงาน

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
ฉันไม่คิดว่ามีเหตุผลที่ดีในการเริ่มต้นอาร์เรย์สตริงที่นี่เพื่อสร้างวัตถุนี้ ใครก็ตามที่กำลังมองหาโปรดใช้คำตอบอย่างใดอย่างหนึ่ง
Robert Smith

2
@Unsliced ​​และ @Padel มีคำตอบที่ถูกต้องมากขึ้น imo ไม่จำเป็นต้องผ่านnewอะไรอีกถ้าคุณเริ่มต้นด้วย{ }
Don Cheadle

สำหรับ C ++ CLI มันเป็นเช่น:Collections::Generic::List<int>^ mylist = gcnew Collections::Generic::List<int>(gcnew array<int>{0, 1, 2, 3, 4})
Rostfrei

@Bobrot ทำไม? เพราะการจัดสรร a new String[]ไม่มีประสิทธิภาพ?
Dylan Czenski

8
@DylanChensky ฉันจะบอกว่าเป็นกฎทั่วไปการทำสิ่งที่ไม่จำเป็นนั้นไม่มีประสิทธิภาพ จริงอยู่ที่อินสแตนซ์นี้อาจไม่ใช่เรื่องใหญ่ แต่ลองคิดดูว่ารหัสของคุณจะเกลื่อนไปด้วยไอเท็มแบบนี้ มันสามารถสร้างความแตกต่างโดยรวมโดยเฉพาะอย่างยิ่งเมื่อมันมาถึงการใช้หน่วยความจำ
Robert Smith

556

เพิ่งลบออก()ในตอนท้าย

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

4
@Oded: msdn.microsoft.com/en-us/library/bb384062.aspx "Collection initializers"
Lucero

คุณหมายถึง. NET / C # รุ่นเฉพาะหรือไม่ เท่าที่ฉันรู้งานนี้ตั้งแต่ v3.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 อยู่คุณจะไม่สามารถใช้คุณสมบัตินี้ได้
Phil Gan

145

คุณยังไม่ได้ถามคำถาม แต่ควรเป็นรหัส

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

เช่นไม่มีการต่อท้าย () หลังรายการ


ข้อผิดพลาด 7 นิพจน์ใหม่ต้องการ () หรือ [] หลังจากพิมพ์
Bilgin Kılıç

2
@blgnklc เนื่องจากคุณใช้ C # 2 ซึ่งไม่รองรับคุณสมบัตินี้
Phil Gan

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

ด้วยวิธีนี้ถ้าคุณรับค่าจากจาก IO คุณสามารถเพิ่มลงในรายการที่จัดสรรแบบไดนามิก


2

ย้ายวงเล็บเหลี่ยมแบบนี้:

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

0

หนึ่งคุณลักษณะที่เย็นจริงๆคือรายการ initializer ผลงานได้ดีกับการเรียนที่กำหนดเองที่มากเกินไป: คุณจะมีเพียงที่จะใช้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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.