Подтвердить что ты не робот

По крайней мере, один объект должен реализовать IComparable

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");
                }
            }
        }
    }
}

Итак, я продолжаю получать

Как минимум один объект должен реализовать IComparable.

"при попытке добавить второго игрока, первый работает, а второй - нет. Я также ДОЛЖЕН использовать SortedSet, потому что это требование для работы, это школьная работа.

4b9b3361

Ответ 1

Ну, вы пытаетесь использовать SortedSet<>... что означает, что вы заботитесь о заказе. Но по звукам этого типа Player не реализует IComparable<Player>. Итак, какой порядок сортировки вы ожидаете увидеть?

В принципе, вам нужно сообщить вашему коду Player, как сравнивать одного игрока с другим. В качестве альтернативы вы можете реализовать IComparer<Player> в другом месте и передать это сравнение в конструктор SortedSet<>, чтобы указать, в каком порядке вы хотите, чтобы игроки вошли. Например, вы могли бы:

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);
    }
}

Тогда:

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

Ответ 3

Сделайте свой класс Player для реализации IComparable.

Ответ 4

Ваш класс Player должен реализовать интерфейс IComparable. SortedSet содержит элементы в отсортированном порядке, но как он узнает, что такое отсортированный порядок, если вы не сказали ему, как их сортировать (используя IComparable)?