2017-04-14 1 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)'오버로드를 사용하십시오. 설명서 및/또는 예제 [here] (https://msdn.microsoft.com/en-us/library/9s9ak971(v=vs.110).aspx) – Nino

+0

을 살펴 보겠습니다. 아마도 검색 중일 수 있습니다. 오더 바이 (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 (문자열, IFormatProvider)'오버로드를 사용하고 쉼표를 decima로 정의해야합니다 (또는 IFormatProvider로'Application.CurrentCulture' 사용). – Nino

+0

@Ben 미안 해요, 점이 있습니다. 쉼표가 아닙니다. – Vectis

0


는 사용했다 : CultureInfo.CreateSpecificCulture를 ("EN-GB") 나는 다른 나라에서 데이터를 사용하고

.

귀하의 도움에 감사드립니다.