【发布时间】:2015-05-05 02:24:28
【问题描述】:
我正在尝试理解 System.Linq.Lookup 类。调用GetType()时,显示如下:
System.Linq.Lookup`2+Grouping[System.Object,System.Data.DataRow]
- 反勾号是什么意思?
-
2+是什么意思? -
2+后面的Grouping类是什么? - 进一步,在Fiddle的
Inspect()方法中,为什么lookup有Key属性而不是Count和Item属性?
最终目标是学习如何将它绑定到嵌套的 ASP.NET 中继器。我们已经成功地将结果转换为Dictionary<string, DataTable>。不过,我们怀疑,一旦我们了解了它的结构,就可以将目录绑定到 GroupedEnumerable。
public static class Program
{
public static void Main()
{
var dt = GetData();
var enumerable = dt.AsEnumerable();
var grouped = enumerable.GroupBy(dr => dr["Name"]);
Inspect(grouped);
}
public static void Inspect(IEnumerable<IGrouping<object, DataRow>> grouped)
{
LogType("grouped", grouped);
var lookup = grouped.FirstOrDefault();
LogType("lookup", lookup);
LogType("key", lookup.Key);
var item = lookup.FirstOrDefault();
LogType("item", item);
}
public static void LogType(string label, object v)
{
Console.WriteLine("\n" + label.PadRight(10) + v.GetType());
}
public static DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("StartDate");
dt.Columns.Add("EndDate");
for(var i = 0; i < 10; ++i)
{
var row = dt.NewRow();
row["Name"] = i % 2;
row["StartDate"] = DateTime.Now;
row["EndDate"] = DateTime.Now;
dt.Rows.Add(row);
}
return dt;
}
}
输出
grouped System.Linq.GroupedEnumerable`3[System.Data.DataRow,System.Object,System.Data.DataRow]
lookup System.Linq.Lookup`2+Grouping[System.Object,System.Data.DataRow]
key System.String
item System.Data.DataRow
编辑
Forked Fiddle 从GroupedEnumerable 检索值。
用我自己的话回答:
-
反勾号是什么意思? 反勾号表示一个类采用的类型参数的数量。在这种情况下,它表示
Lookup类采用两个类型参数。 -
2+是什么意思?2属于后面的勾,而不是+。加号表示我们正在访问一个嵌套在另一个类中的类。在这种情况下,这意味着我们正在访问嵌套在Lookup类中的Grouping类。 -
2+后面的Grouping类是什么? 这是一个嵌套在Lookup中的类。 -
进一步,在 Fiddle 的
Inspect()方法中,为什么lookup具有Key属性而不是Count和Item属性?lookup具有Key属性因为它不是Lookup;这是一个嵌套在Lookup中的Grouping。
【问题讨论】: