Linq list接口vs具体接口
本文关键字:接口 vs Linq list | 更新日期: 2023-09-27 18:17:16
现在用
IList<string> listOfStrings = (new string[] { "bob","mary"});
We can not preform
listOfStrings.ToList().ForEach(i => i.DoSome(i)));
我们需要重塑到接口的具体实现
List<string> listOfStrings = ((new string[] { "bob","mary"}).ToLIst();
那么我们可以对每个
做alistOfStrings.ForEach(i => i.DoSome(i)));
这是因为foreach操作符不能与IList接口一起工作吗?为什么会这样?
您没有使用foreach
操作符-您正在使用ForEach
方法,该方法在List<T>
(这里)上声明,也用于数组。在IList<T>
和IEnumerable<T>
上没有这种扩展方法。你可以写一个,但我个人会使用真正的foreach
循环:
foreach (var text in listOfStrings)
{
...
}
请参阅Eric Lippert关于这个主题的博客文章,他的想法比我的更清晰。
ForEach
方法为List<T>.ForEach
。它不是IList<T>
上定义的方法。
然而,你的第一个例子实际上是工作的:
listOfStrings.ToList().ForEach(i => i.DoSome(i)));
可点数的。ToList方法返回一个List<T>
,这使得上面的操作能够正常工作。
然而,你不能这样做:
//编译时失败listOfStrings。ForEach(i => i. dosome (i));
因为这是直接使用IList<T>
,它没有定义ForEach方法