Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565

Как сравнить объекты в методе обобщенного класса?

20.08.2018, 15:04. Показов 2346. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Как сравнить объекты в методе обобщенного класса? У меня пишет что:
Operator '==' can not be applied to oprend of type 'T' and 'T'.
Хочу сравнить объект в массиве в моем обобщенном классе, с объектом переданным как аргумент в метод.

C#
1
2
3
4
5
6
7
8
9
10
  public void Del(T obj)
    {
        for (int i = 0; i < end; i++)
        {
            if (array[i] == obj) //Error
            {
 
            }
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2018, 15:04
Ответы с готовыми решениями:

Приём константных векторов класса, как аргументов в методе другого класса
Есть такой класс: class Order { private: int numberOrder; map &lt;string, int&gt; catalogDish; double totalCost; public: ...

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; import com.jogamp.opengl.GL2; import...

Как в методе класса вызвать другой метод того же класса?
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A, int B, int C)

10
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.08.2018, 15:08
Кажется необходимо переопределять несколько методов - Equals и GetHashCode
https://docs.microsoft.com/ru-... dvs.100%29
0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
20.08.2018, 15:13  [ТС]
Почтальон,
по идее если выставить ограничение то можно будет сравнивать, а что насчет стандартных не ссылочных типов тогда? почему их без Equals не сравнить?) Типа что ambiguous?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.08.2018, 15:16
Как я понял, Equals нужно переопределять для ссылочных типов данных (там как раз по значению идет сравнение).
Цитата Сообщение от Bring Посмотреть сообщение
а что насчет стандартных не ссылочных типов тогда?
так у вас же обобщенные классы, в любом случае типы данных будут ссылочными. или ошибаюсь ?
0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
20.08.2018, 15:26  [ТС]
Цитата Сообщение от Почтальон Посмотреть сообщение
в любом случае типы данных будут ссылочными. или ошибаюсь
ошибаетесь
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
20.08.2018, 15:30
Это ради примера так или в реальности тоже будет array в обобщенном методе? Просто зачем тогда дженерики, если в методе жестко тип забит...

Добавлено через 39 секунд
Или это поле в обобщенном классе?
0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
20.08.2018, 15:32  [ТС]
Цитата Сообщение от Toros1992 Посмотреть сообщение
Или это поле в обобщенном классе?
методы в обобщенном классе
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
20.08.2018, 15:32
C#
1
if (EqualityComparer<T>.Default.Equals(array[i], obj))
1
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
20.08.2018, 15:58  [ТС]
Someone007,
Вариант для сына маминой подруги, слишком сложный.
Я нашел другой.

C#
1
2
3
4
5
6
7
8
 for (int i = 0; i < size; i++)
        {
            if (array[i].Equals(obj))
            {
                index = i;
                break;
            }
        }
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.08.2018, 16:38
Bring, и у вас этот код отрабатывает корректно ?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.08.2018, 17:11
Цитата Сообщение от Bring Посмотреть сообщение
Хочу сравнить объект в массиве в моем обобщенном классе, с объектом переданным как аргумент в метод.
Добавьте в сигнатуру метода ограничение where T : IEquatable<T> или добавьте перегрузку, принимающую IEqualityComparer<T>.

Цитата Сообщение от Bring Посмотреть сообщение
Я нашел другой.
Этот вариант может некорректно работать с некоторыми ссылочными типами и всегда будет очень плохо работать со значимыми типами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2018, 17:11
Помогаю со студенческими работами здесь

Как вызвать метод класса в другом методе этого же класса?
&lt;? class load_files{ public function traverse_hierarchy($path) { // from...

Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса C++: как правильно использовать метод ...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать этот метод внутри класса, экземпляром...

Как сравнить объекты на не равенство?
is используется для сравнения объектов, например if(obj is classRect){.....} а как сравнить на не равенство, я думал так, но не...

Коллекция их обобщенного класса
&quot;Создать коллекцию, представляющую собой обобщенный класс, ограниченный только объектами-наследниками класса FileStream&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru