Sco*_*ker 8 c# asp.net-mvc icomparable
好的,我有一个简单的IEnumerable<HtmlString> things,我想把它分成四个相等的组.
var quarter = things.Count() / 4;
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩,但我得到这个funkiness:
'/'应用程序中的服务器错误.至少有一个对象必须实现IComparable.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.ArgumentException:至少有一个对象必须实现IComparable.
第36行:int quarter = things.Count()/ 4;
谁知道这里到底发生了什么?为什么我需要实现IComparable才能获得简单的计数?
Jon*_*eet 21
我的猜测是,这与LINQ的懒惰评估有关OrderBy.例如,如果您有:
var things = unsortedThings.OrderBy(foo => foo.Bar);
var quarter = things.Count() / 4;
Run Code Online (Sandbox Code Playgroud)
然后,如果foo.Bar属性不能相互比较,那将完全抛出该异常.
例如:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10045 次 |
| 最近记录: |