我的问题是我总是想以某种方式订购一组对象。
例如:
class foo{
public string name {get;set;}
public DateTime date {get;set;}
public int counter {get;set;}
}
...
IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
}
我遇到的问题是它一直在冗长地附加排序顺序。一个巧妙的解决方案似乎只是创建一个实现的类IComparer<foo>
,这意味着我可以这样做:
IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a, new fooIComparer())
}
.
问题是,这个实现的order方法如下
...
public int Compare(foo x, foo y){ }
这意味着它在非常精细的基础上进行比较。
当前的实现(可能会起作用,尽管我正在编写伪代码)
public int Compare(foo x, foo y){
if (x==y)
return 0;
var order = new []{x,y}.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
return (order[0] == x) ? -1 : -1;//if x is first in array it is less than y, else it is greater
}
这不是很有效,另一个可以提供更整洁的解决方案吗?理想情况下完全没有 Compare(x,y) 方法?