现在用
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接口一起使用,为什么会这样?
答案 0 :(得分:8)
您没有使用foreach
运算符 - 您正在使用ForEach
方法,该方法在List<T>
(here)上声明也适用于arrays。 IList<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方法。