我无法完全整理我的列表。这是基于int的排序,我使用了CompareTo()形式的IComparable,自定义Comparer委托和匿名委托。这对我来说没有任何作用。如何更改列表排序以正确排序
这里是代码:
[TestMethod]
public void SortingPlayersFirst()
{
//arrange
Player player = new Player("neosb");
Player player2 = new Player("simone");
Player player3 = new Player("Alice");
player.Score = 5;
player2.Score = 2;
player3.Score = 10;
Players players = new Players();
players.Add(player);
players.Add(player2);
players.Add(player3);
//I have tried this one
players.Sort(Player.ComparePlayersByScore);
//and this one
players.Sort()
// and this one
IComparer<Player> comp = Comparer<Player>.Create(
(p1, p2) => p1.Score.CompareTo(p2.Score));
players.Sort(comp);
//this one fails the test
Assert.AreEqual(player3, players[0], "Highest score is not first");
//however this one passes the test
Assert.AreNotEqual(player2, players[2], "Lowest score is not last");
}
public class Players : List<Player>
{
}
public class Player : IComparable<Player>, IEquatable<Player>
{
public string Name { get; set; }
public int Score { get; set; }
public Player(string name)
{
Name = name;
Score = 0;
}
public int CompareTo(Player other)
{
return Score.CompareTo(other.Score);
}
public static int ComparePlayersByScore(Player player1, Player player2)
{
if (player1.Score > player2.Score)
return 1;
else if (player1.Score < player2.Score)
return -1;
else
return 0;
}
}
我有什么做的,对此列表进行排序,并通过单元测试,以及为什么它的部分进行排序。
只是一个侧面说明 - 测试'List.Sort'似乎是多余的。它已经通过微软测试。测试'CompareTo'和'ComparePlayersByScore'方法只需要两个'Player's,这将是一个更容易阅读和理解的测试。 – Default
你的比较器在哪里? –
比较器是在播放器类 - ComparePlayersByScore(),我知道它应该在委托类外,但为了简单起见,我把它放在 – simone