给出此代码
namespace GridTests
{
public class Grid<T>
{
IEnumerable<T> DataSource { get; set; }
IList<Column> Columns = new List<Column>();
class Column
{
public string DisplayText { get; set; }
Func<T, object> Rowdata { get; set; }
}
}
}
我需要能够遍历列集合并使用DisplayText获取Rowdata的对象值。
由于
答案 0 :(得分:2)
IEnumerable<object> Search(string yourLookup)
{
foreach(Column column in yourGridInstance.Columns)
{
if(column.DisplayText.Equals(yourLookup, yourStringcomparaisonOptions)
{
foreach(T value in yourGridInstance.DataSource)
{
yield return column.Rowdata(T);
}
}
}
}
Linq版
IEnumerable<object> Search(string yourLookup)
{
return yourGridInstance.Columns
.Where(column=>column.DisplayText.Equals(yourLookup, yourStringcomparaisonOptions))
.SelectMany(c=> yourGridInstance.DataSource.Select(data=>c.RowData(data)));
}
答案 1 :(得分:1)
你的问题仍然不是很清楚。我不确定您要提供哪个T RowData方法。如果你想在DataSource枚举器中使用每个T运行该方法,你可以这样做。
public void Enumerate(string displayText)
{
Column column = this.Columns.FirstOrDefault(item => item.DisplayText == displayText);
if (column != null)
{
foreach (T key in DataSource)
{
object value = column.Rowdata(key);
// Do something with your value here.
}
}
else
{
throw new ArgumentException("DisplayText not found in Columns.", "displayText");
}
}