gpt4 book ai didi

c# - 为什么 GroupBy 生成的 Lookup 没有 Lookup 属性?

转载 作者:行者123 更新时间:2023-12-01 22:21:20 27 4
gpt4 key购买 nike

我试图理解 System.Linq.Lookup类(class)。调用GetType()时,显示如下:

System.Linq.Lookup`2+Grouping[System.Object,System.Data.DataRow]
  • 后面的勾号是什么意思?
  • 2+ 是什么意思?意思是?
  • 什么是 Grouping 2+ 之后的类?
  • 此外,在 fiddle 的 Inspect() 中方法,为什么lookup有一个Key属性(property)而不是 CountItem属性(property)?

最终目标是学习如何将其绑定(bind)到嵌套的 ASP.NET 转发器。我们已经成功地将结果转换为 Dictionary<string, DataTable> 。不过,我们怀疑可以将目录绑定(bind)到 GroupedEnumerable一旦我们了解了它的结构。

Fiddle

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 FiddleGroupedEnumerable 检索值.

用我自己的话回答:

  • 后面的勾号是什么意思?后面的勾号表示类采用的类型参数的数量。在本例中,它表示 Lookup类采用两个类型参数。
  • 2+ 是什么意思?意思是? 2属于后面的勾号而不是 + 。加号意味着我们正在访问嵌套在另一个类中的类。在本例中,这意味着我们正在访问 Grouping嵌套在 Lookup 中的类类(class)。
  • 什么是 Grouping 2+ 之后的类?这是一个嵌套在 Lookup 中的类。
  • 此外,在 fiddle 的 Inspect() 中方法,为什么lookup有一个Key属性(property)而不是 CountItem属性?lookup有一个Key属性,因为它不是 Lookup ;这是 Grouping嵌套在 Lookup 内.

最佳答案

System.Linq.Lookup`2+Grouping[System.Object,System.Data.DataRow]

System.Linq.Lookup`2在 C# 中表示为 System.Linq.Lookup<T,U> (后面的勾表示该类是泛型,数字是泛型参数的数量)。

+Grouping意味着 System.Linq.Lookup`2 内部定义了一个类类名为 Grouping .

方括号内的两种类型是泛型 ( System.Linq.Lookup ) 封闭的两种类型。

所以用 C# 编写的完整类型如下所示:

System.Linq.Lookup<object, System.Data.DataRow>.Grouping

该类型不需要 Items属性,因为它实现了 IEnumerable ,这意味着类型本身可以迭代(就像任何其他 IEnumerable ,例如 List<T> )。

并非所有列表/集合都有 Count属性(property),没有什么说他们必须这样做。您可以通过调用 Count() 获取计数扩展方法,但这可能会导致整个枚举被迭代,这可能会或可能不会产生显着的性能成本。

关于c# - 为什么 GroupBy 生成的 Lookup 没有 Lookup 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036578/

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