Создать класс прототип

175
28 марта 2019, 04:30

нужно создать класс-прототип для хранения и обработки экземпляров структур, наложить ограничение на параметр типа данных: элементы коллекции должны быть значимого типа, тип-аргумент должен реализовывать интерфейс IComparable вот моя структура

public struct Sportsmen:IComparable
    {
        public string Surname { get; private set; }
        public int YearOfBirth { get; private set; }
        public string KindOfSport { get; private set; }
        public string Rank { get; private set; }
        public void SetSurname(string surname)
        {
            Surname = surname;
        }
        public void SetYearOfBirth(int yearOfBirth)
        {
            if (yearOfBirth > 0)
                YearOfBirth = yearOfBirth;
            else
                throw new Exception("Неверный год рождения");
        }
        public void SetKindOfSport(string kindOfSport)
        {
            KindOfSport = kindOfSport;
        }
        public void SetRank(string rank)
        {
            Rank = rank;
        }
        public Sportsmen(string surname,int yearOfBirth,string kindOfSport,string rank)
        {
            Surname = surname;
            YearOfBirth = yearOfBirth;
            KindOfSport = kindOfSport;
            Rank = rank;
        }
        public override string ToString()
        {
            return ("Фамилия : " + Surname + "\nГод Рождения : " + YearOfBirth + "\nВид спорта : " + KindOfSport + "\nРазряд : " + Rank);
        }
        public int CompareTo(object obj)
        {
            return KindOfSport.CompareTo(((Sportsmen)obj).KindOfSport);
        }
    }

вот мой класс

class ClassSportsmen<T> where T: struct,IComparable<T>
    {
        T[] array;
        IComparable<T> compare;
        public ClassSportsmen(T[] listStruct,IComparable<T> compare=null)
        {
            array = listStruct;
        }
    }

при создании объекта класса

ClassSportsmen<Sportsmen> sportsmen = new ClassSportsmen<Sportsmen>(sportsmens);

подчёркивает Spotrsmen:

CS0315 The type 'Sportsmen' cannot be used as type parameter 'T' in the generic type or method 'ClassSportsmen'. There is no boxing conversion from 'Sportsmen' to 'System.IComparable'.

помогите исправить пожалуйста

Answer 1

IComparable и IComparable <T> - разные интерфейсы.

Решение: заменить интерфейсы так, чтобы они были одинаковыми.

public struct Sportsmen : IComparable, IComparable<Sportsmen>

или

сlass ClassSportsmen<T> where T : struct, IComparable
READ ALSO
C# Spire.XLS как получить 0 при пустой ячейке

C# Spire.XLS как получить 0 при пустой ячейке

Я использовал 2 метода для получения значения ячейки(пустой и с цифрой): sheetGetText(row,cell) всегда дает пустую строку, а sheet

143
Освободить файл от процесса

Освободить файл от процесса

У меня есть круг и его заливка это картинка которая в папке \Resources\Images\При нажатии на нее пользователь может выбрать другую, которая будет...

251
Подмена метода C#

Подмена метода C#

Вопрос не нов, но в сети я не смог найти ответа к сожалениюВ общем ситуация следующая,у меня есть класс к примеру:

173
Как добавить данные в базу MySQL из DataGrid C#?

Как добавить данные в базу MySQL из DataGrid C#?

Как добавить данные вводимые в DataGrid в базу данных MySQL? Добавленных данных нет в базе, и ошибок, почему это происходит тоже нетЯ пытаюсь решить...

222