using System;
using System.Globalization;
using System.Collections.Generic;
public class Test
{
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() : base("") { }
public Child(string title):base(title){}
}
public static void Main()
{
List<Child> children = new List<Child>();
children.Add(new Child() { Title = "ABC" });
children.Add(new Child() { Title = "BAB" });
children.Add(new Child() { Title = "ADE" });
children.Sort(); //Fails with "Failed to compare two elements in the array."
foreach(var c in children)
Console.WriteLine(c.Title);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICAgICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGFyZW50IDogSUNvbXBhcmFibGU8UGFyZW50PiB7CiAgICBwdWJsaWMgc3RyaW5nIFRpdGxlOwogICAgcHVibGljIFBhcmVudChzdHJpbmcgdGl0bGUpe3RoaXMuVGl0bGUgPSB0aXRsZTt9CgogICAgcHVibGljIGludCBDb21wYXJlVG8oUGFyZW50IG90aGVyKXsKICAgICAgICByZXR1cm4gdGhpcy5UaXRsZS5Db21wYXJlVG8ob3RoZXIuVGl0bGUpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgQ2hpbGQgOiBQYXJlbnQgewogICAgcHVibGljIENoaWxkKCkgOiBiYXNlKCIiKSB7IH0KICAgIHB1YmxpYyBDaGlsZChzdHJpbmcgdGl0bGUpOmJhc2UodGl0bGUpe30KfQoKICAgICAgICAgICAgCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CiAgICAgICBMaXN0PENoaWxkPiBjaGlsZHJlbiA9IG5ldyBMaXN0PENoaWxkPigpOwogICAgICAgIGNoaWxkcmVuLkFkZChuZXcgQ2hpbGQoKSB7IFRpdGxlID0gIkFCQyIgfSk7CiAgICAgICAgY2hpbGRyZW4uQWRkKG5ldyBDaGlsZCgpIHsgVGl0bGUgPSAiQkFCIiB9KTsKICAgICAgICBjaGlsZHJlbi5BZGQobmV3IENoaWxkKCkgeyBUaXRsZSA9ICJBREUiIH0pOwogICAgICAgIGNoaWxkcmVuLlNvcnQoKTsgLy9GYWlscyB3aXRoICJGYWlsZWQgdG8gY29tcGFyZSB0d28gZWxlbWVudHMgaW4gdGhlIGFycmF5LiIKICAgICAgZm9yZWFjaCh2YXIgYyBpbiBjaGlsZHJlbikKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoYy5UaXRsZSk7Cgl9Cn0=