C# 为什么不能将LINQ与WorkItemCollection一起使用
我正在使用TFS的COM接口。TeamFoundationServer.ExtendedClient v14.95.3。我试图使用LINQ来迭代各种集合。例如,此功能非常有效: 但是,当我尝试更改为使用方法语法时,失败了: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 =>
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());
}