此方法是使用延迟执行实现的。 即时返回值是一个对象, 该对象存储执行操作所需的所有信息。 此方法表示的查询在枚举对象之前不会执行, 方法是直接调用其GetEnumerator
方法, 或者通过在foreach
视觉C#对象中For Each
或在 Visual Basic 中使用。
白话:本身不发生变化,是在给其他列表时,按照排序的规格给别的列表拷贝。
实验代码
using System;
using ;
using ;
namespace 排序
{
class Pet
{
public string Name { get; set; }
public string Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
("Hello World!");
("OrderBy---------------------------------------------");
OrderByEx1();
("\nOrderByDescending---------------------------------");
OrderByEx2();
();
}
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 = (pet => );
(pet => );
("本身排序的数组 pets");
foreach (Pet pet in pets)
{
("{0} - {1}", , );
}
("排序后的的列表 pets");
foreach (Pet pet in query)
{
("{0} - {1}", , );
}
IEnumerable<Pet> query_ben = pets;
IEnumerable<Pet> query_bei = (pet => );
("本身排序的列表 pets");
foreach (Pet pet in query_ben)
{
("{0} - {1}", , );
}
("排序后的的列表 pets");
foreach (Pet pet in query_bei)
{
("{0} - {1}", , );
}
}
public static void OrderByEx2()
{
Pet[] pets = { new Pet { Name="Barley", Age="4" },
new Pet { Name="Boots", Age="8" },
new Pet { Name="Whiskers", Age="1" } };
IEnumerable<Pet> query = (pet => );
(pet => );
("本身排序的数组 pets");
foreach (Pet pet in pets)
{
("{0} - {1}", , );
}
("排序后的的列表 pets");
foreach (Pet pet in query)
{
("{0} - {1}", , );
}
IEnumerable<Pet> query_ben = pets;
IEnumerable<Pet> query_bei = (pet => );
("本身排序的列表 pets");
foreach (Pet pet in query_ben)
{
("{0} - {1}", , );
}
("排序后的的列表 pets");
foreach (Pet pet in query_bei)
{
("{0} - {1}", , );
}
}
}
}
运行结果