Khởi tạo IEnumerable <string> Trong C #


115

Tôi có đối tượng này:

IEnumerable<string> m_oEnum = null;

và tôi muốn khởi tạo nó. Đã thử với

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

nhưng nó nói "IEnumerable không chứa một phương thức để thêm chuỗi. Có ý kiến ​​gì không? Cảm ơn

Câu trả lời:


181

Ok, thêm vào các câu trả lời mà bạn có thể cũng đang tìm kiếm

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

hoặc là

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

4
Bây giờ cũ rồi, nhưng tôi sẽ tránh lựa chọn thứ hai. Bạn có thể muốn điều này tương tác với IEnumerables khác không tương thích với mảng.
Joel Coehoorn

92

IEnumerable<T>là một giao diện. Bạn cần bắt đầu với một loại bê tông (mô hình đó IEnumerable<T>). Thí dụ:

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

31

Như string[]triển khai IEnumerable

IEnumerable<string> m_oEnum = new string[] {"1","2","3"}

18

IEnumerable chỉ là một giao diện và do đó không thể khởi tạo trực tiếp.

Bạn cần tạo một lớp cụ thể (như a List)

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

sau đó bạn có thể chuyển nó cho bất cứ thứ gì mong đợi IEnumerable.


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

IEnumerable<string> m_oEnum = GetData();

8
Mặc dù một chút quá mức cần thiết, 1 cho việc sử dụng năng suất
Adriano Carneiro

1
@AdrianCarneiro +1 cho vần
5argon

6

Bạn không thể khởi tạo một giao diện - bạn phải cung cấp một triển khai cụ thể của IEnumerable.


1

Bạn có thể tạo một phương thức tĩnh sẽ trả về IEnumerable mong muốn như sau:

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

Hoặc chỉ cần làm:

IEnumerable<string> myStrings = new []{ "first item", "second item"};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.