public int CompareTo(Ordo target) { if (Category != target.Category) { return(Category.CompareTo(target.Category)); } //同カテゴリが残る //カテゴリ内で名前より方向を揃えることを優先するカテゴリであるか? if ((Category == BoneCategory.Other) || (Category == BoneCategory.Hair)) { if (StemName != target.StemName) { return(StemName.CompareTo(target.StemName)); } //同名ボーンが残る if (Direction != target.Direction) { return(Direction.CompareTo(target.Direction)); } //同方向が残る } else { if (Direction != target.Direction) { return(Direction.CompareTo(target.Direction)); } //同方向が残る if (NameOrder != target.NameOrder) { return(NameOrder.CompareTo(target.NameOrder)); } //同名ボーンが残る } if (isParent) { return(target.NumerusOrdinis.CompareTo(NumerusOrdinis)); } //親ボーンでないものが残る else if ((NumerusOrdinis != 0) && (target.NumerusOrdinis != 0)) { return(NumerusOrdinis.CompareTo(target.NumerusOrdinis)); } //添数字が無いものが残る return(StemName.CompareTo(target.StemName)); }