C# 使用OrderBy<;t来源,TKey>;(IEnumerable<;TSource>;,Func<;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=

我想通过这个例子来理解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
        */
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

这种情况的不同之处在于编译器正在根据方法调用参数为您推断类型参数。

否,来自for
Enumerable.OrderBy方法(IEnumerable,Func

  • t来源

    源的元素的类型

  • TKey

    KeySelect返回的键的类型。参数源类型:System.Collections.Generic.IEnumerable

    要排序的值序列。键选择器类型:System.Func

    从元素中提取键的函数

因此,
TSource
=
Pet
TKey
int

Jon Skeet对这些细节进行了详尽的介绍。也就是说,在这种情况下,在visual studio中使用鼠标浮动工具来查看泛型的播放效果非常有用


你的意思是代码中省略了什么?这里的Func是什么?@Love:这是由编译器推断出来的。有关详细信息,请参阅通用方法上的MSDN:那么Func是什么?Func是keySelector从元素中提取键的函数。这是完整的函数描述
List<string> names = new List<string>();