Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不能将LINQ与WorkItemCollection一起使用_C#_Linq - Fatal编程技术网

C# 为什么不能将LINQ与WorkItemCollection一起使用

C# 为什么不能将LINQ与WorkItemCollection一起使用,c#,linq,C#,Linq,我正在使用TFS的COM接口。TeamFoundationServer.ExtendedClient v14.95.3。我试图使用LINQ来迭代各种集合。例如,此功能非常有效: 但是,当我尝试更改为使用方法语法时,失败了: public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList) { return workItemList.Select(item =>

我正在使用TFS的COM接口。TeamFoundationServer.ExtendedClient v14.95.3。我试图使用LINQ来迭代各种集合。例如,此功能非常有效:

但是,当我尝试更改为使用方法语法时,失败了:

    public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList)
    {
        return workItemList.Select(item => item.Fields["Title"].Value.ToString());
    }
。。。给我错误“WorkItemCollection”不包含“Select”的定义

我有使用系统。Linq;在我的档案里。我正在引用System.Core.dll。WorkItemCollection不实现IEnumerable。那么为什么这不起作用呢?

WorkItemCollection实现的是IEnumerable,而不是IEnumerable。后者是通用的接口,是LINQ.</P>的基础。 但是,可以使用强制转换扩展方法从一个转换为另一个:

workItemList.Cast<WorkItem>.Select(item => ...
WorkItemCollection只实现IEnumerable,但不实现IEnumerable。LINQ扩展只为IEnumerable声明,不为非泛型IEnumerable声明

您可以使用以下类型:


也可以使用Cast来代替类型。但是,如果序列中除了WorkItem之外还有其他内容,而在本场景中可能永远不会出现这种情况,则Cast将抛出InvalidCastException,而OfType将忽略该元素。

谢谢!工作完美。我希望我能接受这两个答案:
workItemList.Cast<WorkItem>.Select(item => ...
public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList)
{
    return workItemList.OfType<WorkItem>()
                       .Select(item => item.Fields["Title"].Value.ToString());
}