C# 使用OrderBy<;t来源,TKey>;(IEnumerable<;TSource>;,Func<;TSource,TKey>;)
我想通过这个例子来理解TSource,Tkey的概念 我们有密码C# 使用OrderBy<;t来源,TKey>;(IEnumerable<;TSource>;,Func<;TSource,TKey>;),c#,linq,c#-4.0,C#,Linq,C# 4.0,我想通过这个例子来理解TSource,Tkey的概念 我们有密码 class Pet { public string Name { get; set; } public int Age { get; set; } } public static void OrderByEx1() { Pet[] pets = { new Pet { Name=
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void OrderByEx1()
{
Pet[] pets = { new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 } };
IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
foreach (Pet pet in query)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
}
/*
This code produces the following output:
Whiskers - 1
Boots - 4
Barley - 8
*/
class宠物
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共静态无效OrderByEx1()
{
宠物[]宠物={新宠物{Name=“大麦”,年龄=8},
新宠物{Name=“Boots”,年龄=4},
新宠物{Name=“胡须”,年龄=1};
IEnumerable query=pets.OrderBy(pet=>pet.Age);
foreach(查询中的宠物)
{
Console.WriteLine(“{0}-{1}”,pet.Name,pet.Age);
}
}
/*
此代码生成以下输出:
胡须-1
靴子-4
大麦-8
*/
我们可以说TSource是“pet”,key是“Age”,pet=>pet.Age是
Func<TSource, TKey>?
Func?
谢谢。不,
TSource
是类型Pet
,而TKey
是类型int
。因此,如果不使用类型推断,您将有:
IEnumerable<Pet> query = pets.OrderBy<Pet, int>(pet => pet.Age);
然后这里的类型参数是string
(因此,在本例中,您可以用手波浪的方式说T=string
)
这种情况的不同之处在于编译器正在根据方法调用参数为您推断类型参数。否,来自forEnumerable.OrderBy方法(IEnumerable,Func
- t来源 源的元素的类型
- TKey KeySelect返回的键的类型。参数源类型:System.Collections.Generic.IEnumerable 要排序的值序列。键选择器类型:System.Func 从元素中提取键的函数
TSource
=Pet
;TKey
intJon Skeet对这些细节进行了详尽的介绍。也就是说,在这种情况下,在visual studio中使用鼠标浮动工具来查看泛型的播放效果非常有用
你的意思是代码中省略了什么?这里的Func是什么?@Love:这是由编译器推断出来的。有关详细信息,请参阅通用方法上的MSDN:那么Func是什么?Func是keySelector从元素中提取键的函数。这是完整的函数描述
List<string> names = new List<string>();