Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按转换为int的字符串对列表排序_C#_Linq_List_Sorting - Fatal编程技术网

C# 按转换为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' '???'] 因

我有一个保存为字符串的Int列表,我想对它们进行排序。 我提出了以下解决方案:

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查询中的(局部)变量,这被认为是一种不好的做法