我想通过这个例子来理解TSource的概念,Tkey。
我们有代码
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
*/
我们可以说TSource是“宠物”,关键是“年龄”和宠物=&gt; pet.Age是
Func<TSource, TKey>?
感谢。
答案 0 :(得分:10)
不,TSource
是Pet
类型,TKey
是类型int
。所以不使用类型推断,你有:
IEnumerable<Pet> query = pets.OrderBy<Pet, int>(pet => pet.Age);
TSource
和TKey
是该方法的generic type parameters。您可以将它们视为类的泛型类型参数...因此在List<T>
中,T
是类型参数,如果您写:
List<string> names = new List<string>();
那么这里的类型参数是string
(所以在这种情况下你可以用手写的方式说T=string
)。
你的情况有所不同,根据方法调用参数,编译器推断你的类型参数。
答案 1 :(得分:1)
不,来自Enumerable.OrderBy<TSource, TKey> Method (IEnumerable<TSource>, Func<TSource, TKey>
的{{1}}
TSource
来源元素的类型。
TKEY的
keySelector返回的键的类型。参数source类型:System.Collections.Generic.IEnumerable
要订购的一系列值。 keySelector类型:System.Func
从元素中提取键的函数。
所以TSource
= Pet
; TKey
= int
答案 2 :(得分:1)
Jon Skeet的book非常详尽地介绍了这些细节。话虽这么说,在这种情况下,通过在visual studio中使用鼠标浮动工具来了解Generic的播出方式是有用的。