本人划下来的1号句子是不是有问题啊?是什么意思?请求你们的理解告诉本人 大致是个什么意思?谢谢啦 什么叫默认的比较代码?什么叫非默认的比较代码?还有类不都一样吗?只不过类名不一样而已~!
解决方案
8
static class Program { static void Main() { My[] myArray = new My[] { new My() { Id = 1, Name = "xyz"}, new My() { Id = 2, Name = "abc"}, }; Array.Sort(myArray); foreach (var my in myArray) Console.WriteLine(my.Id); // 1, 2 (使用‘默认’的IComparable,按Id排) Array.Sort(myArray, new MyNameComparer()); foreach (var my in myArray) Console.WriteLine(my.Id); // 2, 1 (显式地使用‘其他类’进行‘非默认’的比较,按Name排) } class My : IComparable { public int Id { get; set; } public string Name { get; set; } public int CompareTo(object obj) { return obj is My ? (this.Id - (obj as My).Id) : 1; } } class MyNameComparer : System.Collections.IComparer { public int Compare(object x, object y) { My mx = (x as My), my = (y as My); if (mx == null || my == null) { return System.Collections.Comparer.Default.Compare(mx, my); } return string.Compare(mx.Name, my.Name); } } }
另外,IComparable接口汉语是‘可比较的’,而‘IComparer”的翻译是’比较者‘。
例如,铅球,重量上是’可以比较的‘。而可以称重的天平,则可以是’比较者‘,用来比较两个铅球。
6
不必纠结于这句话
对象想怎么排序是你本人的事情
对象想怎么排序是你本人的事情
8
return System.Collections.Comparer.Default.Compare(mx, my); 里的mx和my比的是什么?是 Id 还是 Name?
到此为止,都不是! mx 和 my 是两个 My 类型对象。到底比了什么,有这个决定
class My : IComparable
{
public int Id { get; set; }
public string Name { get; set; }
到此为止,都不是! mx 和 my 是两个 My 类型对象。到底比了什么,有这个决定
class My : IComparable
{
public int Id { get; set; }
public string Name { get; set; }
public int CompareTo(object obj)
{
return obj is My ? (this.Id – (obj as My).Id) : 1;
}
假如 My 没有实现 IComparable 接口,那就按两个对象的地址进行比较