การเริ่มต้น IEnumerable <string> ใน C #


116

ฉันมีวัตถุนี้:

IEnumerable<string> m_oEnum = null;

และฉันต้องการเริ่มต้น พยายามด้วย

IEnumerable<string> m_oEnum = new IEnumerable<string>() { "1", "2", "3"};

แต่มันขึ้นว่า "IEnumerable ไม่มีเมธอดในการเพิ่มสตริงคิดยังไงก็ได้ขอบคุณ

คำตอบ:


182

ตกลงเพิ่มคำตอบที่ระบุไว้ที่คุณอาจจะยังมองหา

IEnumerable<string> m_oEnum = Enumerable.Empty<string>();

หรือ

IEnumerable<string> m_oEnum = new string[]{};

4
แก่แล้ว แต่ฉันจะหลีกเลี่ยงตัวเลือกที่สอง คุณอาจต้องการให้สิ่งนี้โต้ตอบกับ IEnumerables อื่น ๆ ที่เข้ากันไม่ได้กับอาร์เรย์
Joel Coehoorn

94

IEnumerable<T>เป็นอินเทอร์เฟซ คุณต้องเริ่มต้นด้วยประเภทคอนกรีต (ที่ใช้IEnumerable<T>) ตัวอย่าง:

IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3"};


19

IEnumerable เป็นเพียงอินเทอร์เฟซดังนั้นจึงไม่สามารถสร้างอินสแตนซ์ได้โดยตรง

คุณต้องสร้างคลาสที่เป็นรูปธรรม (เช่น a List)

IEnumerable<string> m_oEnum = new List<string>() { "1", "2", "3" };

IEnumerableแล้วคุณจะสามารถผ่านนี้เพื่ออะไรคาดหวังว่า


13
public static IEnumerable<string> GetData()
{
    yield return "1";
    yield return "2";
    yield return "3";
}

IEnumerable<string> m_oEnum = GetData();

8
แม้ว่าจะมากไปหน่อย แต่ +1 สำหรับการใช้ผลตอบแทน
Adriano Carneiro

1
@AdrianCarneiro +1 สำหรับสัมผัส
5argon

6

คุณไม่สามารถสร้างอินเทอร์เฟซอินเทอร์เฟซได้ - คุณต้องจัดเตรียมการใช้งาน IE ที่เป็นรูปธรรมอย่างเป็นรูปธรรม


2

คุณสามารถสร้างวิธีการคงที่ซึ่งจะส่งคืน IEnumerable ที่ต้องการดังนี้:

public static IEnumerable<T> CreateEnumerable<T>(params T[] values) =>
    values;
//And then use it
IEnumerable<string> myStrings = CreateEnumerable("first item", "second item");//etc..

อีกวิธีหนึ่งเพียงแค่ทำ:

IEnumerable<string> myStrings = new []{ "first item", "second item"};

0

IEnumerable เป็นอินเทอร์เฟซแทนที่จะมองหาวิธีสร้างอินสแตนซ์อินเทอร์เฟซให้สร้างการใช้งานที่ตรงกับอินเทอร์เฟซ: สร้างรายการหรืออาร์เรย์

IEnumerable<string> myStrings = new [] { "first item", "second item" };
IEnumerable<string> myStrings = new List<string> { "first item", "second item" };
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.