gpt4 book ai didi

c# - OrderBy Linq 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 19:23:59 25 4
gpt4 key购买 nike

我有一个使用 OrderBy() Linq 函数排序的列表,它返回一个 IOrderedEnumerable

var testList = myList.OrderBy(obj => obj.ParamName);

ParamName 是一个可以包含整数和字符串的对象。上面的 orderBy 根据整数值对列表进行排序。现在我在 testList 上操作一个 foreach 并根据其整数值将 ParamName 属性更改为某个字符串,如下所示,

using (var sequenceEnum = testList.GetEnumerator())
{
while (sequenceEnum.MoveNext())
{
sequenceEnum.Current.ParamName = GetStringForInteger(int.Parse(Convert.ToString(sequenceEnum.Current.ParamName)));
}
}

接下来发生的事情是,在前一个循环之后列表中项目的顺序被打乱,列表是根据分配的字符串而不是初始顺序排序的。

但是,当我将 .ToList().OrderBy() 子句结合使用时,顺序会保留。

谁能帮我看看这是怎么回事?

示例输出说明:

enter image description here

最佳答案

编辑:我们都弄错了你的问题。它以错误的方式排序的原因是因为您正在比较“B”和“AA”并期望 AA 像在 excel 中一样在 B 之后,这当然不会按字母顺序排列。

在排序时指定一个显式比较器或在执行排序之前将 ParamName 转换为 Int。


Linq 通常返回 IEnumerable 元素的原因是它具有惰性求值行为。这意味着它会在您需要时评估结果,而不是在您构建它时。

调用 ToList 会强制 linq 评估结果以生成预期的列表。

TL;DR 在获取结果之前执行 linq 查询和更改源数据集时要非常小心。

关于c# - OrderBy Linq 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41738008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com