C# 这个linq OrderBy方法实际上对任何东西进行排序吗?
我偶然发现了下面的文章。它是否实际对C# 这个linq OrderBy方法实际上对任何东西进行排序吗?,c#,linq,C#,Linq,我偶然发现了下面的文章。它是否实际对位置集合中的项目进行排序?在这种情况下,OrderBy是否对AddRange返回的数据进行操作 var locations = new List<Location>(); locations.AddRange(propertyStreets .Select(street => new Location {
位置集合中的项目进行排序?在这种情况下,OrderBy
是否对AddRange
返回的数据进行操作
var locations = new List<Location>();
locations.AddRange(propertyStreets
.Select(street => new Location
{
Name = street.Source.FullStreetName,
Type = "Address",
ItemType = ItemType.StreetName,
City = street.Source.City,
State = street.Source.State,
SortOrder = GetAddressSortOrder(street, new[] { parsedAddress })
})
.OrderBy(loc => loc));
var位置=新列表();
locations.AddRange(propertyStreets
.选择(街道=>新位置
{
Name=street.Source.FullStreetName,
Type=“地址”,
ItemType=ItemType.StreetName,
城市=街道.Source.City,
State=street.Source.State,
SortOrder=GetAddressSortOrder(新街[]{parsedAddress})
})
.订购人(loc=>loc));
它是否实际对位置集合中的项目进行排序
它是基于以下几点:
OrderBy
根据提供的表达式在内部创建一个OrderedEnumerable
。在问题中,OrderBy(loc=>loc)
使用对象本身而不是任何属性,因此将使用默认比较。用于使用.Equals()
方法比较两个对象的同一比较器。在这种情况下,没有什么意义
在这种情况下,OrderBy是否对AddRange返回的数据进行操作
AddRange
不返回任何内容。OrderBy
应用于您在AddRange
方法中传递的集合的投影,这意味着它将根据排序表达式获取已排序的项。@DavidG,因此我可以简单地删除。OrderBy(loc=>loc)
并且它不会改变任何事情?哦,等等,我误读了代码。这里的OrderBy
在将Select
的结果添加到locations
@AngryHacker之前,会对其结果进行排序,因为如果要删除OrderBy()
调用,则会在传递给AddRange()
的序列上调用OrderBy()
,它可能会更改将新的位置
对象添加到位置
集合的顺序。因此,我想说,只有当且仅当项目在该集合中的存储顺序不相关时,您才可以删除它。@DavidG是的,我只是重新格式化了问题,使其更易于阅读。如果您遵守顺序,而不对项目进行排序,则您的Location类上可能没有实现IComparable
。