gpt4 book ai didi

c# - 为什么我不能将 LINQ 与 WorkItemCollection 一起使用

转载 作者:行者123 更新时间:2023-11-30 19:08:56 26 4
gpt4 key购买 nike

我正在使用 TFS 的 COM 接口(interface)。 (TeamFoundationServer.ExtendedClient v14.95.3)。我正在尝试使用 LINQ 遍历各种集合。例如,这个函数效果很好:

    public static IEnumerable<string> GetTitles(WorkItemCollection workItemList)
{
return from WorkItem item in workItemList select item.Fields["Title"].Value.ToString();
}

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

    public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList)
{
return workItemList.Select(item => item.Fields["Title"].Value.ToString());
}

... 给我错误 “'WorkItemCollection' 不包含 'Select' 的定义...”

我的文件中有 using System.Linq;。我正在引用 System.Core.dllWorkItemCollection 确实 实现了 IEnumerable。那为什么这行不通呢?

最佳答案

WorkItemCollection只执行 IEnumerable , 但不是 IEnumerable<WorkItem> . LINQ 扩展仅为 IEnumerable<T> 声明, 不适用于非通用 IEnumerable .

你可以做的是使用 OfType<T>() :

public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList)
{
return workItemList.OfType<WorkItem>()
.Select(item => item.Fields["Title"].Value.ToString());
}

而不是 OfType<T>你也可以使用 Cast<T> .但是,如果除了 WorkItem 之外还有其他东西在序列中(在这种情况下可能永远不会出现这种情况),Cast<T>会抛出 InvalidCastException同时 OfType<T>将忽略该元素。

关于c# - 为什么我不能将 LINQ 与 WorkItemCollection 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com