2017-04-14 78 views
-2

我有用戶列表。按c中的參數對對象列表排序#

我想按幾個參數排序列表。

  case 0: 
       //Date (work) int for example: 0 
       Osu_ve.UserList.Sort((e1, e2) => e1.Index.CompareTo(e2.Index)); 
       break; 

      case 1: 
       //Name (work) string  for example: vectis 
       Osu_ve.UserList.Sort((e1, e2) => e1.UData.username.CompareTo(e2.UData.username)); 
       break; 

      case 2: 
       //PP  (doesn't work) string for example: 14688.76 
       Osu_ve.UserList.Sort((e1, e2) => Convert.ToDouble(e2.UData.pp_raw).CompareTo(Convert.ToDouble(e1.UData.pp_raw))); 
       break; 
      case 3: 
       // Best PP (doesn't work) string for example: 820.545 
       Osu_ve.UserList.Sort((e1, e2) => Convert.ToDouble(e2.UBestScore[0].pp).CompareTo(Convert.ToDouble(e1.UBestScore[0].pp))); 
       break; 

      case 4: 
       //Rank (work) string for example: 48484 
       Osu_ve.UserList.Sort((e1, e2) => Convert.ToDouble(e1.UData.pp_rank).CompareTo(Convert.ToDouble(e2.UData.pp_rank))); 
       break; 

      case 5: 
       //Country Rank (work) string for example: 54 
       Osu_ve.UserList.Sort((e1, e2) => Convert.ToDouble(e1.UData.pp_country_rank).CompareTo(Convert.ToDouble(e2.UData.pp_country_rank))); 
       break; 

      case 6: 
       //Acc (doesn't work) string for example: 98.5678623 
       Osu_ve.UserList.Sort((e1, e2) => Convert.ToDouble(e1.UData.accuracy.Remove(5)).CompareTo(Convert.ToDouble(e2.UData.accuracy.Remove(5)))); 
       break; 

我收到此錯誤信息: 輸入字符串的不正確的格式。

很少有作品。 問題在哪裏?

+0

使用'Convert.ToDouble(string,IFormatProvider)'過載。看看文檔和/或示例[這裏](https://msdn.microsoft.com/en-us/library/9s9ak971(v = vs.110).aspx) – Nino

+0

我得到一個預感,你可能正在搜索對於像list.OrderBy(x => x.Field1).ThenBy(x => x.Field2)?附:此 –

+0

需要System.Linq輸入字符串的格式不正確是非常自我描述的,並且是轉換失敗的結果。如果您在調試器中看到這個問題,請查看導致問題的字符串的值。 –

回答

0

十進制標記需要是一個點而不是逗號。
https://msdn.microsoft.com/en-us/library/zh1hkw6k(v=vs.110).aspx

+1

這並非完全正確。十進制標記可以散列,如果你想。 OP應使用'ToDouble(string,IFormatProvider)'重載並將逗號定義爲decima(或使用'Application.CurrentCulture'作爲IFormatProvider) – Nino

+0

@Ben對不起,有點。不是逗號。 – Vectis

0

只好用:CultureInfo.CreateSpecificCulture( 「EN-GB」)

我使用來自不同國家的數據。

謝謝大家的幫助。