C# 在c中按参数对对象列表进行排序#

C# 在c中按参数对对象列表进行排序#,c#,sorting,C#,Sorting,我有一个用户列表 我想按几个参数对列表进行排序 case 0: //Date (work) int for example: 0 Osu_ve.UserList.Sort((e1, e2) => e1.Index.CompareTo(e2.Index)); break; case 1: //Name (w

我有一个用户列表

我想按几个参数对列表进行排序

            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;
我收到以下错误消息:
输入字符串的格式不正确

他们中很少有人能工作。
问题出在哪里?

小数点必须是点而不是逗号。

必须使用:CultureInfo.CreateSpecificCulture(“en GB”)

我使用的是来自不同国家的数据


谢谢大家的帮助。

这并不完全正确。如果愿意,小数点可以是散列。OP应该使用
ToDouble(string,IFormatProvider)
重载并将逗号定义为十进制(或者使用
Application.CurrentCulture
作为IFormatProvider)@Ben对不起,这里有点。不是逗号。使用
Convert.ToDouble(字符串,IFormatProvider)
重载。看看文档和/或示例,我有一种预感,您可能正在搜索类似list.OrderBy(x=>x.Field1)的内容,然后是by(x=>x.Field2)?p、 此输入字符串需要s.System.Linq,但格式不正确,具有很强的自描述性,是转换失败的结果。如果在调试器中看到这一点,请查看导致问题的字符串的值。