我有一个Int保存为String的列表,我想订购它们。 我提出了以下解决方案:
sortList = sortList.OrderByDescending(x => Convert.ToInt32(x.Number)).ToList();
它完美无缺,但仅当列表 包含数字时才有效。例如,如果有一个项目是像“???”这样的字符串排序完全失败。
期望:
['313', '309', '119', '49', '???']
结果:
['309' '49' '313' '119' '???']
答案 0 :(得分:4)
所以你需要使用int.TryParse()
并为无效字符串返回一个低值:
sortList = sortList.OrderByDescending(x =>
{
int i;
return int.TryParse(x.Number, out i) ? i : int.MinValue;
});
我使用OrderByDescending
代替OrderBy
,因为您显示的预期结果是降序。
答案 1 :(得分:3)
在C# 7中,您可以将此缩减为一行,同时使用out
-variables仍然使用TryParse()
:
sortList = sortList.OrderBy(x => Int32.TryParse(x.Number, out var i) ? i : Int32.MinValue).ToList();