C# 按转换为int的字符串对列表排序
我有一个保存为字符串的Int列表,我想对它们进行排序。 我提出了以下解决方案:C# 按转换为int的字符串对列表排序,c#,linq,list,sorting,C#,Linq,List,Sorting,我有一个保存为字符串的Int列表,我想对它们进行排序。 我提出了以下解决方案: sortList = sortList.OrderByDescending(x => Convert.ToInt32(x.Number)).ToList(); 它工作得很好,但仅当列表仅包含数字时。例如,如果有一个项目是类似于“?”的字符串,则排序完全失败 期望: ['313', '309', '119', '49', '???'] 结果: ['309' '49' '313' '119' '???'] 因
sortList = sortList.OrderByDescending(x => Convert.ToInt32(x.Number)).ToList();
它工作得很好,但仅当列表仅包含数字时。例如,如果有一个项目是类似于“?”的字符串,则排序完全失败
期望:
['313', '309', '119', '49', '???']
结果:
['309' '49' '313' '119' '???']
因此,您需要为无效字符串使用并返回一个低值:
sortList = sortList.OrderByDescending(x =>
{
int i;
return int.TryParse(x.Number, out i) ? i : int.MinValue;
});
我使用了OrderByDescending
而不是OrderBy
,因为您显示的预期结果是降序的。因此您需要使用并返回无效字符串的低值:
sortList = sortList.OrderByDescending(x =>
{
int i;
return int.TryParse(x.Number, out i) ? i : int.MinValue;
});
我使用了OrderByDescending
而不是OrderBy
,因为您显示的预期结果是降序的。在中,您可以将其减少为一行,同时仍然使用TryParse()
,方法是:
在中,您可以将其减少为一行,同时仍然使用TryParse()
,方法是:
什么是
x.Number
?x.Number是对象中的字符串。您的输出显示类似字符串的内容,但字符串没有Number
属性。如果您有对象,那么输出应该像[{Number:“309”},{Number:“49”}…]
@HimBromBeere:我想他是说第二个列表是他实际得到的(即坏结果),而不是他想要的第一个列表。什么是x.Number
?x.Number是对象中的字符串。您的输出显示类似字符串的内容,但字符串没有Number
属性。如果你有对象,那么输出应该像[{Number:“309”},{Number:“49”}…]
@HimBromBeere:我想他是说第二个列表是他实际得到的(即坏结果),而不是他想要的第一个列表。@MaksimSimkin他的期望是按降序排列的,@马克西西姆金他的期望值是递减的,@HimBromBeere:但你不需要再声明了。这是一个很大的改进,因为目前需要修改LINQ查询中的(局部)变量,这被认为是不好的practise@HimBromBeere:但是你不需要再申报了。这是一个很大的改进,因为目前需要修改LINQ查询中的(局部)变量,这被认为是一种不好的做法