Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 120

Операция '>' в универсальном типе

17.10.2013, 19:49. Показов 2971. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, всем.
Пишу класс матриц. Пытаюсь реализовать метод получения максимального элемента.
Он нужен в тех случаях, когда Т - это числовой тип (я так понял, он должен наследоваться от ValueType).
Есть ли способ проверять тип Т на числовой и, затем, сравнивать его объекты?

C#
1
2
3
4
5
6
7
8
9
10
11
12
public T MaxElement ()
        {
            T max = matrix[0, 0];
 
            foreach (T x in matrix)
            {
                if (x > max) // тут, естественно, ошибка
                {
                    max = x;
                }
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2013, 19:49
Ответы с готовыми решениями:

Метод расширения в универсальном классе
Доброго времени суток! К своему стыду не знаю как этот прием называется чтоб почитать в мсдн. В общем хочу реализовать аналог...

Убрать заголовок в универсальном отчете
Доработала немного стандартный отчет "Дебиторская задолженность по срокам долга" сделав его внешним, но не могу убрать заголовок и...

Себестоимость не показывается в Универсальном Отчете
Всем привет! Я хочу вычислить себестоимость товаров по каждой реализации. Делаю для целей управленческого учета, чтобы посчитать...

7
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.10.2013, 19:53
Привет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
public T MaxElement () where T : IComparable<T>
        {
            T max = matrix[0, 0];
            var comparer = Comparer<T>.Default;
            foreach (T x in matrix)
            {
                if (comparer.Compare(x, max) > 0) // тут, естественно, ошибки не будет
                {
                    max = x;
                }
            }
        }
1
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 120
17.10.2013, 20:06  [ТС]
Спасибо. Понял, куда смотреть, но код выдаёт ошибку:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public T MaxElement () where T : IComparable<T> // Ошибка 1   Ограничения не разрешены в объявлениях, не являющихся универсальными
        {
            T max = matrix[0, 0];
            var comparer = Comparer<T>.Default;
            foreach (T x in matrix)
            {
                if (comparer.Compare(x, max) > 0) // тут, естественно, ошибки не будет
                {
                    max = x;
                }
            }
        }
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
17.10.2013, 20:21
Некий_Чел, kolorotur,
C#
1
public T MaxElement<T>() where T : IComparable<T>
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 120
17.10.2013, 20:33  [ТС]
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Некий_Чел, kolorotur,
C#
1
public T MaxElement<T>() where T : IComparable<T>
Пишет, что: Ошибка 2 Преобразование типа "T" в "T [D:\Users\Host\documents\visual studio 2012\Projects\OOP_6\OOP_6\Matrix.cs(9)]" невозможно

Но я сделал иначе. Указал это ограничение в шапке класса и всё заработало. Только код метода немного поменял:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Matrix<T> where T : IComparable<T>
    {
        // ...
 
        public T MaxElement () 
        {
            T max = matrix[0, 0];
 
            foreach (T x in matrix)
            {
                if (x.CompareTo(max) > 0)
                {
                    max = x;
                }
            }
            
            return max;
        }
 
        // ...
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.10.2013, 20:55
Цитата Сообщение от Некий_Чел Посмотреть сообщение
Только код метода немного поменял
Зря поменяли.
Если T ссылочный тип и x == null, то при попытке сравнения вылетит NullReferenceException.
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 120
17.10.2013, 21:14  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Зря поменяли.
Если T ссылочный тип и x == null, то при попытке сравнения вылетит NullReferenceException.
Похоже на то. Но вопрос в том, как метод будет искать максимальный эл-т среди ссылочных объектов?
Я сейчас откатил метод и опробовал его на стрингах, и так и не понял, по каким критериям он мне выдаёт элемент.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
17.10.2013, 21:31
Цитата Сообщение от Некий_Чел Посмотреть сообщение
вопрос в том, как метод будет искать максимальный эл-т среди ссылочных объектов?
"Максимальный" в контексте IComparable — это тот, который будет находиться на последней позиции в отсортированной по возрастанию коллекции.
В примере со строками — последняя из отсортированных по алфавиту (ординально) строка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2013, 21:31
Помогаю со студенческими работами здесь

Изменение макета в Универсальном отчете
Конфигурация &quot;УПП&quot;. Требуется в отчет вставить в заголовок &quot;Утверждаю...&quot;, в подвал &quot;Должность&quot; и &quot;Подпись&quot;. После...

Текстовый формат в универсальном отчете
Вопрос наверно глупый, но я ответа не нашел. Вставляю в отчет поле: УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(...

Шаттлворт о новом универсальном элементе управления
Источники: http://www.opennet.ru/opennews/art.shtml?num=25994 https://lists.launchpad.net/ayatana/msg01097.html Ваше мнение???

Пользовательские поля в универсальном отчете (дата)
Добрый день. ЗУП, Настроен отчет по регистру состояние сотрудников Необходимо настроить пользовательское поле, которое будет равно...

Переименование отчетов сделанных на универсальном отчете
Добрый день, такая проблема делаю отчеты на универсальном отчете, но у всех отчетов имя Универсальный Отчет, вот как пытаюсь...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru