当前位置:  开发笔记 > 编程语言 > 正文

为什么C#让我在不知道如何排序时编译排序代码

如何解决《为什么C#让我在不知道如何排序时编译排序代码》经验,为你挑选了1个好方法。

我认为C#允许我在我的类上调用sort并且没有指定对它们进行排序的方法,也没有编写比较重载这是奇怪的.当我运行此代码时,会弹出此错误

List myClassArray= new List();
//myClassArray.add(...);
myClassArray.Sort();

An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll

Additional information: Failed to compare two elements in the array.

为什么C#让我在不知道如何排序时编译这段代码!-编辑-

食典委问为什么会这样做.我在评论中写了一个关于它为什么会这样做的理论.这里有一些示例代码.

class A : IComparable
{
    public int CompareTo(A a) { return 0; }
}
class C //: IComparable
{
    public int CompareTo(A a) { return 0; }
}
    static void test()
    {
        A a = new A();
        bool b;
        C c = new C();

        object o = a;
        IComparable ia = (IComparable)o;
        b = ia == ia;

        o = c;
        IComparable ic = (IComparable)o;
        b = ic == ic;

        //uncomment this to get a compile time error
        //IComparable ic2 = c;
        return;
    }

如果在返回之前取消注释该行,则会出现编译时错误.当您在类c中取消注释IComparable时,它将编译并工作.



1> Matt..:

List 的泛型参数没有约束,要求它实现IComparable .如果有的话,它会(某种程度上)保证元素可以被排序,但你不能使用List 来保存任何没有实现IComparable的东西.由于您可能不会对您创建的每个列表进行排序,因此这是正确的决定.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有