List.Sort(
を使用してオブジェクトのリストをソートしようとしていますが、実行時に配列の要素を比較できないことがわかります。祖先クラスでIComparable <T>を使用し、子クラスを比較できないのはなぜですか?
は、アレイ
クラス構造体に2つの要素を比較するのに失敗しました:
public abstract class Parent : IComparable<Parent> {
public string Title;
public Parent(string title){this.Title = title;}
public int CompareTo(Parent other){
return this.Title.CompareTo(other.Title);
}
}
public class Child : Parent {
public Child(string title):base(title){}
}
List<Child> children = GetChildren();
children.Sort(); //Fails with "Failed to compare two elements in the array."
はなぜIComparable<T>
を実装ベースのサブクラスを比較することはできませんか?私はおそらく何かが不足していますが、なぜこれが許されてはならないのか分かりません。
編集:私はする(SharePoint 2010)
EDIT2 .NET 3.5をターゲットにしていますことを明確にすべき:.NET 3.5が問題である(下記答えを参照)。
これはランタイムの例外と思われるため、子供の1人が 'Title'ヌルを持っている可能性があります。それとも、あなたのリストにnullがありますか? – nvoigt
http://stackoverflow.com/questions/1658661/failed-to-compare-two-elements-in-the-array –
.NET 4では動作しますが[ideon **ではありません](http: //ideone.com/rZ0rVL)、.NET版は何を使用していますか? –