如何将IList转换为iEnumerable以表示接口?

时间:2013-08-20 07:43:45

标签: c# asp.net

我正在使用API​​,我正在实现一个返回IEnumerable的方法的接口。

我在我的实现中以List构建集合,因为我需要.Add()方法。

我可以将其转换为IEnumerable吗?

2 个答案:

答案 0 :(得分:8)

由于List<T>同时实现IEnumerable<T>IEnumerable,如果您只需将其作为方法的返回值,则可以返回它,例如:

public IEnumerable<string> GetData()
{
    List<string> myList = new List<string>{" data"};
    return myList; //works
}

当您调用该方法时,您获得的另一方面是IEnumerable<T>引用,该引用指向List<T>对象。

这意味着用户可以在任何可以使用IEnumerable<T>的地方使用结果,而且简单的强制转换可以暴露内部List<T>,从而允许修改数据。 e.g:

IEnumerable<string> result = GetData();
Console.Write(result.First()); // " data";

List<string> resultAsList = (result as List<string>);
resultAsList.Insert(0, "other data");

Console.Write(result.First()); // "other data";

如果您希望不更改结果,可以使用.AsReadOnly方法返回仍为ReadOnlyCollection<T>的{​​{1}},如下所示:

IEnumerable<T>

答案 1 :(得分:3)

Sweko所述,您只需返回列表,但如果您不希望从外部修改列表,可以在列表中调用AsEnumerable以在外部公开IEnumerable

public IEnumerable<string> GetData()
{
   List<string> yourList = new List<string>();
   return yourlist.AsEnumerable();
}