度々の質問失礼します。
.net framework 4.5で作ったC#のプログラムの対象フレームワークを4.0に切り替えたら、
CompareTo()を使ったソート結果に違いがでてしまいました。
具体的にはList内のオブジェクトにzIndexという数値をもたせ、数値の小さいものから順に
ソートするというもので、同値の場合はリストに追加した順番のままになるつもりでした。
ソート対象となるクラスはこちらです。
class SortTest : IComparable
{
public int zIndex = 0;
public string name = "";
public SortTest(string name)
{
this.name = name;
}
public int CompareTo(object obj)
{
int x = this.zIndex - ((SortTest)obj).zIndex;
if (x < 0)
{
return -1;
}
else if (x == 0)
{
return 0;
}
else
{
return 1;
}
}
}
実験に使ったメインクラスは次のようになっています。
SortTest sample1 = new SortTest("sample1");
SortTest sample2 = new SortTest("sample2");
SortTest sample3 = new SortTest("sample3");
SortTest sample4 = new SortTest("sample4");
sample1.zIndex = 0;
sample2.zIndex = 0;
sample3.zIndex = 0;
sample4.zIndex = 0;
var sampleList = new List<SortTest>();
sampleList.Add(sample1);
sampleList.Add(sample2);
sampleList.Add(sample3);
sampleList.Add(sample4);
sampleList.Sort();
foreach (SortTest test in sampleList)
{
Console.WriteLine(test.name);
}
バージョン4.5の結果は
sample1
sample2
sample3
sample4
と並びました。zIndexは全て同値なのでリストに追加した順番そのままです。(正常)
バージョン4.0の結果は
sample3
sample4
sample1
sample2
になってしまいます。
ちなみに同値ではなく
sample1.zIndex = 1;
sample2.zIndex = 2;
sample3.zIndex = 3;
sample4.zIndex = 4;
と割り当てた場合はどちらのバージョンでも正しい順番になりました。
バージョンに関係なく狙った動作をさせるにはどう改善したらいいのでしょうか?
よろしくお願いします。