按字符串排序列表转换为int

时间:2017-02-08 13:42:58

标签: c# linq list sorting

我有一个Int保存为String的列表,我想订购它们。 我提出了以下解决方案:

sortList = sortList.OrderByDescending(x => Convert.ToInt32(x.Number)).ToList();

它完美无缺,但仅当列表 包含数字时才有效。例如,如果有一个项目是像“???”这样的字符串排序完全失败。

期望:

['313', '309', '119', '49', '???']

结果:

['309' '49' '313' '119' '???']

2 个答案:

答案 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();