使用OrderBy <tsource,tkey =“”>(IEnumerable <tsource>,Func <tsource,tkey =“”>)</tsource,> </tsource> </tsource,>

时间:2012-08-17 20:33:57

标签: 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="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>?

感谢。

3 个答案:

答案 0 :(得分:10)

不,TSourcePet类型,TKey是类型int。所以不使用类型推断,你有:

IEnumerable<Pet> query = pets.OrderBy<Pet, int>(pet => pet.Age);

TSourceTKey是该方法的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的播出方式是有用的。

enter image description here