Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для xChernobyl
6 / 6 / 0
Регистрация: 07.02.2019
Сообщений: 54

Ключевое слово where, обьявление обобщенных-типов. Можно ли установить несколько условий ?

12.01.2020, 01:22. Показов 3665. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вопрос такой: можно ли иметь несколько условий для where при обьявлении обобщенных типов ? Например, что-то вроде этого:

C#
1
2
3
interface ISomeInterface<T> where T: class, struct
{
}
Версия языка 8.0 (.net core 3.1)
Если знаете костыли, тоже хотел бы о них узнать.

Заранее благодарю за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2020, 01:22
Ответы с готовыми решениями:

Как можно указать несколько условий в if ?
Что-то я нигде этого не нашел... К примеру, берем два игральных кубика (рандомное число от 2 до 12). При выпадении, скажем, 7 или 11...

Можно ли в условном операторе задавать несколько условий?
Можно ли в условном операторе задавать несколько условий?если да, то как?

Взаимосвязь типов в двух обобщённых классах
Здравствуйте. Возникли затруднения в решении следующей задачи: Как увязать типы в разных классах? Например, при создании объектов...

14
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
12.01.2020, 01:33
Цитата Сообщение от xChernobyl Посмотреть сообщение
можно ли иметь несколько условий для where при обьявлении обобщенных типов ?
можно, через запятую
C#
1
public class MyGenericClass<T> where T : IComparable<T>, new()
и для вашего примера код:
C#
1
2
3
interface ISomeInterface<T>
{
}
0
 Аватар для xChernobyl
6 / 6 / 0
Регистрация: 07.02.2019
Сообщений: 54
12.01.2020, 01:36  [ТС]
Да, но не в случае с class/struct т.к. они оба по идее должны идти первыми.

Задумка в том чтобы можно разрешить *только* struct/class.
Миниатюры
Ключевое слово where, обьявление обобщенных-типов. Можно ли установить несколько условий ?  
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
12.01.2020, 01:37
Цитата Сообщение от xChernobyl Посмотреть сообщение
разрешить *только* struct/class.
а что по вашему еще есть кроме классов и структур?
0
 Аватар для xChernobyl
6 / 6 / 0
Регистрация: 07.02.2019
Сообщений: 54
12.01.2020, 01:38  [ТС]
Да. Например, enum, базовые типы...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,071
Записей в блоге: 2
12.01.2020, 01:39
Лучший ответ Сообщение было отмечено xChernobyl как решение

Решение

Цитата Сообщение от xChernobyl Посмотреть сообщение
Например, что-то вроде этого:
Все типы в C# делятся на Значимые и Ссылочные типы.
То что вы указали охватывает все типы - это равносильно неуказыванию их, вообще.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
12.01.2020, 01:40
Цитата Сообщение от xChernobyl Посмотреть сообщение
enum
это структура
Цитата Сообщение от xChernobyl Посмотреть сообщение
базовые типы...
в тоже структуры
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,071
Записей в блоге: 2
12.01.2020, 01:46
Цитата Сообщение от xChernobyl Посмотреть сообщение
Да. Например, enum.
Enum - это упрощенное объявление статического класса со статическими свойствами только для чтения.

Добавлено через 43 секунды
Цитата Сообщение от КОП Посмотреть сообщение
это структура
Разве не класс?

Добавлено через 4 минуты
Опаньки!
Точно не класс.
null для него невозможен!
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
12.01.2020, 01:48
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Разве не класс?
вообще интом станет после компиляции
2
 Аватар для xChernobyl
6 / 6 / 0
Регистрация: 07.02.2019
Сообщений: 54
12.01.2020, 01:48  [ТС]
Да... что-то я тут затупил. А вообще null "возможен" для всех... ибо int? x = null;. Вообщем в вопросе я разобрался, всем спасибо.

Ответ: То что вы указали охватывает все типы - это равносильно неуказыванию их, вообще.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,071
Записей в блоге: 2
12.01.2020, 02:12
Лучший ответ Сообщение было отмечено xChernobyl как решение

Решение

Цитата Сообщение от xChernobyl Посмотреть сообщение
Да... что-то я тут затупил. А вообще null "возможен" для всех
КОП, xChernobyl, и struct, и Enum производные от ValueType.
Для ValueType невозможен null.
https://docs.microsoft.com/ru-... parameters

Если нужно значение "по умолчанию", то это "default".
Если нужно null - это только класс https://docs.microsoft.com/ru-... words/null

Добавлено через 2 минуты
where - это ограничение типов, а не их перечень
https://metanit.com/sharp/tutorial/3.38.php
https://docs.microsoft.com/ru-... constraint
1
 Аватар для xChernobyl
6 / 6 / 0
Регистрация: 07.02.2019
Сообщений: 54
12.01.2020, 02:22  [ТС]
Так майкрософты так и пишут:

// Use a nullable value type instead:
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.01.2020, 14:37
Элд Хасп, Nullable<T> это структура, производная от ValueType, для которой возможен null
https://docs.microsoft.com/ru-... nullable-1

Добавлено через 1 минуту
Microsoft просто в where навертела описание, что должна быть структура, разновидность которой не допускает null.

Добавлено через 25 минут
----
Если поприкалываться, то в where не допускается множественное наследование.
В данную идею укладывается и недопустимость множественного "наследования" от struct и class.
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,071
Записей в блоге: 2
12.01.2020, 14:42
Цитата Сообщение от amr-now Посмотреть сообщение
Nullable<T> это структура, производная от ValueType, для которой возможен null
Вы правы - забыл за этот тип.
Наверное, единственный среди значимых типов допускающий null.

Цитата Сообщение от amr-now Посмотреть сообщение
Microsoft просто в where навертела описание, что должна быть структура, разновидность которой не допускает null.
Даже в голову не приходит как можно создать ограничение по Nullable<T> и для чего оно может понадобится
C#
1
2
3
4
5
6
7
8
9
10
        public void Metod<T>(T t)
            where T : Nullable<int>
        {
 
        }
        public void Metod<T>(T t)
            where T : Nullable<struct>
        {
 
        }
Даже если бы конструкции были возможны, он, по моему, лишены смысла.

Добавлено через 35 секунд
Цитата Сообщение от amr-now Посмотреть сообщение
В данную идею укладывается и недопустимость множественного "наследования" от struct и class.
Да.
Так и есть!
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.01.2020, 14:43
Пример запрета множественного наследования в where :
C#
1
2
3
    class A { }
    class B { }
    class C<T> where T : A, B { }
Компилятор начнёт ныть, что ему денег не хватает и вообще где снег в январе?
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2020, 14:43
Помогаю со студенческими работами здесь

Массивы - обьявление типов данных
Запутался в типах.. подскажите кому лучше что присвоить. кусок проги, в ней ввод массива ну и попытка вычислить среднее арифметическое.....

Сделать таблицу, в которой можно будет выбирать сразу несколько условий
Доброго времени суток! Ребят, нужна помощь в написании программки в Excel, с чего вообще начинать и чем пользоваться? Задача...

Динамическое изменение типа объекта (для обобщённых типов)
Здравствуйте, проблема в следующем: есть класс с generic: public class Entity { //создаем объект...

Как прописать несколько условий при ИСТИНА и несколько условий при ЛОЖЬ?
Всем доброго времени суток. If &amp; Else как прописать несколько условий при ИСТИНА и несколько условий при ЛОЖЬ ? Напр В11:С18...

Можно ли в один List записать несколько типов структур?
Доброго времени суток! Подскажите, пожалуйста, можно ли как-то в один List положить несколько типов структур?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru