Linq IList接口与具体

时间:2011-12-09 22:21:13

标签: c# linq

现在用

IList<string> listOfStrings = (new string[] {  "bob","mary"});

我们无法预成型

listOfStrings.ToList().ForEach(i => i.DoSome(i)));

我们需要重塑接口的具体实现

List<string> listOfStrings = ((new string[] {  "bob","mary"}).ToLIst();

然后我们可以为每个

做一个
listOfStrings.ForEach(i => i.DoSome(i)));

这是因为foreach运算符不能与IList接口一起使用,为什么会这样?

2 个答案:

答案 0 :(得分:8)

您没有使用foreach运算符 - 您正在使用ForEach 方法,该方法在List<T> (here)上声明也适用于arraysIList<T>IEnumerable<T>上没有此类扩展方法。你可以写一个,但我个人会使用一个真正的foreach循环:

foreach (var text in listOfStrings)
{
    ...
}

请参阅Eric Lippert的博客post on the topic,了解比我更清晰的想法。

答案 1 :(得分:3)

ForEach方法为List<T>.ForEach。它不是IList<T>上定义的方法。


但是,您的第一个示例确实有效:

listOfStrings.ToList().ForEach(i => i.DoSome(i)));

Enumerable.ToList方法会返回List<T>,这样可以让上述方法正常工作。

但是,你不能这样做:

//在编译时失败 listOfStrings.ForEach(i =&gt; i.DoSome(i)));

因为这是直接使用IList<T>,没有定义ForEach方法。