我有一个类和一组 IEnumerables,它们正在使用这个类来给我一个列表中的列表。(有关详细信息,请参阅此问题的答案。)
这是代码:
public IEnumerable<IEnumerable<WorkItemColumn>> EnumerateResultSet(WorkItemCollection queryResults)//DisplayFieldList displayFieldList)
{
foreach (WorkItem workItem in queryResults)
{
yield return EnumerateColumns(queryResults.DisplayFields, workItem);
}
}
public IEnumerable<WorkItemColumn> EnumerateColumns(DisplayFieldList resultSet, WorkItem workItem)
{
foreach (FieldDefinition column in resultSet)
yield return new WorkItemColumn { Name = column.Name, Value = workItem[column.Name], WorkItemForColumn = workItem};
}
和班级:
public class WorkItemColumn
{
public string Name { get; set; }
public object Value { get; set; }
public WorkItem WorkItemForColumn { get; set; }
}
我将此结果设置为我的 ListBox 的 ItemsSource
Form.QueryResultListSource = EnumerateResultSet(queryResults);
当我尝试捕获此列表框的事件时,问题就出现了:
public void QueryResultsSelectionChanged(SelectionChangedEventArgs e)
{
+-----------------+
v |
foreach (WorkItemColumn workItemColumn in e.AddedItems) |
{ |
AddWorkItemToPad(workItemColumn.WorkItemForColumn); |
} +---------------|
| |
v |
foreach (WorkItemColumn workItemColumn in e.RemovedItems) |
{ |
RemoveWorkItemFromPad(workItemColumn.WorkItemForColumn); |
} |
|
} |
|
These items are where the problem is --------------------------------+
当我在调试时检查 e.AddedItems[0] 并且它说它的类型是 EnumerateColumns。
当我尝试转换为该类型时,Visual Studio 说(可以理解) EnumerateColumns 是一种方法,但用作类型。
那么,我怎样才能按类型引用它,以便我可以执行一个 foreach 循环并获取其中的内容呢?
这是我根据答案更新的代码:
public void QueryResultsSelectionChanged(SelectionChangedEventArgs e)
{
foreach (IEnumerable<WorkItemColumn> workItemColumns in e.AddedItems)
{
if (workItemColumns.Count() > 0)
AddWorkItemToPad(workItemColumns.First().WorkItemForColumn);
}
foreach (IEnumerable<WorkItemColumn> workItemColumns in e.RemovedItems)
{
if (workItemColumns.Count() > 0)
RemoveWorkItemFromPad(workItemColumns.First().WorkItemForColumn);
}
}