2017-02-08 26 views
1

我有一個Int列表保存爲字符串,我想訂購它們。 我想出了以下解決方案:按字符串排序列表轉換爲int

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

它完美,但僅當列表只有包含數字。例如,如果有一個項目是「???」排序完全失敗。

後市展望:

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

結果:

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

什麼是'x.Number'? –

+0

x.Number是對象中的字符串。 – zperee

+0

您的輸出顯示類似字符串的內容,但字符串沒有'Number'屬性。如果你有對象,那麼輸出應該看起來像'[{Number:「309」},{Number:「49」} ...]' –

回答

4

所以你需要使用int.TryParse()並返回無效的字符串低值:

sortList = sortList.OrderByDescending(x => 
    { 
     int i; 
     return int.TryParse(x.Number, out i) ? i : int.MinValue; 
    }); 

我用OrderByDescending,而不是OrderBy作爲你展示的預期結果按降序排列。

+2

他想要「???」最後,我會改變MinValue MaxValue –

+0

@MaksimSimkin他的期望是下令, –

+0

是的,你的權利,對不起:) –

3

C# 7,你可以在此同時仍使用TryParse()使用out-variables減少到只有一行,:

sortList = sortList.OrderBy(x => Int32.TryParse(x.Number, out var i) ? i : Int32.MinValue).ToList(); 
+1

@HimBromBeere:但你不需要再聲明它們。 https://docs.microsoft.com/en-us/dotnet/articles/csharp/csharp-7#out-variables一個很大的改進,因爲目前您需要修改LINQ查詢中的(本地)變量,這是不恰當的做法 –