我正在使用COM接口到TFS.(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();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更改为使用方法语法时,它会失败:
public static IEnumerable<string> GetTitles2(WorkItemCollection workItemList)
{
return workItemList.Select(item => item.Fields["Title"].Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)
...给我错误"'WorkItemCollection'不包含'Select'的定义......"
我有using System.Linq;我的档案.我正在引用System.Core.dll.在WorkItemCollection 没有实现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());
}
Run Code Online (Sandbox Code Playgroud)
而不是OfType<T>你也可以使用Cast<T>.但是如果WorkItem序列中存在除了a之外的某些东西(在这种情况下可能永远不会出现这种情况),Cast<T>那么抛出一段InvalidCastException时间OfType<T>会忽略该元素.
WorkItemCollection实现IEnumerable,而不是IEnumerable<T>.它是后者,通用的接口,是LINQ的基础.
您可以使用Cast<T>扩展方法从一个转换为另一个,但是:
workItemList.Cast<WorkItem>.Select(item => ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |