2012-09-21 3 views
7

좋아, 난 IEnumerable<HtmlString> things 간단하고 4 개의 동일한 그룹으로 나눕니다.INT에 대해 "적어도 하나의 개체가 IComparable을 구현해야합니다"? 내가 아는 한,

var quarter = things.Count()/4; 

트릭을 할해야하지만, 대신에 나는이 funkiness 수 :

서버 오류 '/'응용 프로그램을. 적어도 하나의 개체는 IComparable을 구현해야합니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 해당 코드가 코드에서 발생한 위치에 대한 자세한 내용은 스택 추적 을 검토하십시오.

예외 정보 : System.ArgumentException : 하나 이상의 개체가 IComparable을 구현해야합니다.

라인 36 : int quarter = things.Count()/4;

누구나 여기에 무슨 일이 일어나고 있는지 알 수 있습니까? 간단한 계산을 위해 IComparable을 구현해야하는 이유는 무엇입니까?

+1

전체 스택 추적을 게시하시기 바랍니다. 내 추측으로는 게으른 정렬이 진행되고 있다는 것입니다. –

답변

20

내 생각 엔 LINQ의 OrderBy의 게으른 평가와 관련이 있습니다. 예를 들어, 당신이 가지고있는 경우 : foo.Bar 속성이 서로 비교할 수없는 경우

var things = unsortedThings.OrderBy(foo => foo.Bar); 
var quarter = things.Count()/4; 

다음, 그 정확히 예외가 발생합니다. 예를 들어

:

using System; 
using System.Linq; 

class Foo {} 

class Program 
{ 
    public static void Main() 
    { 
     var foos = new[] { new Foo(), new Foo() }; 
     var ordered = foos.OrderBy(x => x); 
     Console.WriteLine(ordered.Count()); 
    } 
} 

출력 :

Unhandled Exception: System.ArgumentException: At least one object must implement IComparable. 
    at System.Collections.Comparer.Compare(Object a, Object b) 
    at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) 
    at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right) 
    at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) 
    at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() 
    at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) 
    at Program.Main() 
+0

맞습니다. 내 친구. .OrderBy()를 제거하면 모든 것이 보급대로 작동합니다. 다시 한번 감사드립니다. –

+0

http://stackoverflow.com/questions/14141891/at-least-one-object-must-implement-icomparable의 중복 –

관련 문제