这句话本人不理解

.Net技术 码拜 9年前 (2016-03-12) 873次浏览
本人划下来的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; }

public int CompareTo(object obj)
{
return obj is My ? (this.Id – (obj as My).Id) : 1;
}

假如 My 没有实现 IComparable 接口,那就按两个对象的地址进行比较


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这句话本人不理解
喜欢 (0)
[1034331897@qq.com]
分享 (0)