c#

c# - Al menos un objeto debe implementar IComparable.



(4)

using System; using System.Xml; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SortedSet<Player> PlayerList = new SortedSet<Player>(); while (true) { string Input; Console.WriteLine("What would you like to do?"); Console.WriteLine("1. Create new player and score."); Console.WriteLine("2. Display Highscores."); Console.WriteLine("3. Write out to XML file."); Console.Write("Input Number: "); Input = Console.ReadLine(); if (Input == "1") { Player player = new Player(); string PlayerName; string Score; Console.WriteLine(); Console.WriteLine("-=CREATE NEW PLAYER=-"); Console.Write("Player name: "); PlayerName = Console.ReadLine(); Console.Write("Player score: "); Score = Console.ReadLine(); player.Name = PlayerName; player.Score = Convert.ToInt32(Score); //==================================== //ERROR OCCURS HERE //==================================== PlayerList.Add(player); Console.WriteLine("Player /"" + player.Name + "/" with the score of /"" + player.Score + "/" has been created successfully!" ); Console.WriteLine(); } else { Console.WriteLine("INVALID INPUT"); } } } } }

Así que sigo recibiendo el "

Al menos un objeto debe implementar IComparable.

"cuando se trata de agregar un segundo jugador, el primero funciona, pero el segundo no. También DEBO usar SortedSet porque ese es el requisito para el trabajo, es el trabajo escolar.


Bueno, estás tratando de usar SortedSet<> ... lo que significa que te importa el pedido. Pero por los sonidos de su tipo de Player no implementa IComparable<Player> . Entonces, ¿qué tipo de orden esperarías ver?

Básicamente, debes decirle a tu código de Player cómo comparar un jugador con otro. Alternativamente, puedes implementar IComparer<Player> en otra parte y pasar esa comparación al constructor de SortedSet<> para indicar en qué orden quieres que SortedSet<> los jugadores. Por ejemplo, puedes tener:

public class PlayerNameComparer : IComparer<Player> { public int Compare(Player x, Player y) { // TODO: Handle x or y being null, or them not having names return x.Name.CompareTo(y.Name); } }

Entonces:

// Note name change to follow conventions, and also to remove the // implication that it''s a list when it''s actually a set... SortedSet<Player> players = new SortedSet<Player>(new PlayerNameComparer());


Haga que su clase Player implemente IComparable .


Tu clase de jugador debe implementar la interfaz de IComparable. SortedSet mantiene los elementos en un orden ordenado, pero ¿cómo sabría cuál es el orden ordenado si no le ha dicho cómo ordenarlos (usando IComparable)?