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();

那么我们可以对每个

做a
listOfStrings.ForEach(i => i.DoSome(i)));

这是因为foreach操作符不能与IList接口一起工作吗?为什么会这样?

Linq list接口vs具体接口

您没有使用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方法