Обобщения или шаблоны (Generic) в C# - Учим Шарп #12

  Рет қаралды 52,816

CODE BLOG

CODE BLOG

Күн бұрын

Пікірлер: 126
@CODEBLOG
@CODEBLOG 6 жыл бұрын
На этом занятии мы рассмотрим Универсальные шаблоны в языке программирования C#. Также часто встречаются названия обобщения, дженерики или generics. Они позволяют определять так называемые универсальные типы данных, которые позволяют динамически определять тип, при этом оставаясь языком со строгой типизацией. 5:20 Начало. Что такое шаблоны (универсальные типы, дженерики, обобщения) в C# 13:00 Создание базовых классов проекта 17:18 Разъяснение, в каких случаях лучше всего использовать универсальные типы 22:00 Создание и использование класса с обобщенным типом 28:35 Планы на курс Учим Шарп 30:35 Множественные универсальные типы C# 37:05 Ограничения generics 49:20 Какие могут быть ограничения обобщенного типа (class, interface, struct, new()) 54:25 Значение по умолчанию default(T) 57:45 Домашнее задание
@Yury93-b8n
@Yury93-b8n 4 жыл бұрын
CODE BLOG - Программирование и C# здравствуйте) юнити уже не актуально?)
@NaNaNaS_000
@NaNaNaS_000 2 жыл бұрын
@@Yury93-b8n почему вы так думаете?
@Yury93-b8n
@Yury93-b8n 2 жыл бұрын
@@NaNaNaS_000 Вадим говорил, что юнити тоже рассмотрит) вот я и спросил
@NaNaNaS_000
@NaNaNaS_000 2 жыл бұрын
@@Yury93-b8n ясно. А программирование под Unity сейчас актуально
@ruslanrasengan3664
@ruslanrasengan3664 3 жыл бұрын
05:24 - начало 14:21 - фича с Property 15:15 - фича с // TODO: some description 26:50 - обзор класса List 32:00 - обзор дженерика с двумя аргументами, пример Dictionary 49:30 - ограничения на типы 54:00 - ключевое слово default
@YTsyvinda
@YTsyvinda 5 жыл бұрын
Спасибо! Обобщение - это переменная для типа. Это самое простое и понятное определение которое мне попалось
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Не совсем точное, но действительно помогает понять на начальном уровне )
@ghjcnjxtkjdtr887
@ghjcnjxtkjdtr887 4 жыл бұрын
На первом уроке 150к просмотров, 12 урок - 17к... Как же быстро отсеиваются будущие конкуренты :)
@LimanOff12
@LimanOff12 3 жыл бұрын
@@Udjduddhe а лучше закреплять практикой
@slavaukharikkim4833
@slavaukharikkim4833 2 жыл бұрын
Привет! Как результаты?
@slavaukharikkim4833
@slavaukharikkim4833 2 жыл бұрын
Привет. Как результаты?
@TheArtzlo
@TheArtzlo 2 жыл бұрын
конкуренты)))Это мышление людей не из IT. Когда заберешься достаточно глубоко , будешь рад что кто-то есть добравшийся чтобы обсудить. А данные видео будешь пересматривать для освежения знаний. В первую очередь практика практика и практика. Простого пути в IT не бывает.
@sunday9797
@sunday9797 2 жыл бұрын
@@TheArtzlo Согласен на все 100%
@paphnooteyyoba8066
@paphnooteyyoba8066 3 жыл бұрын
Очень толково и доходчиво обьясняешь. Спасибо добрый человек, здоровья тебе и хорошей женщины.
@SergeyKirik
@SergeyKirik 2 жыл бұрын
Вадим, спасибо большое за доходчивое пояснение. Пример то что надо, как раз позволил понять зачем в принципе нужны эти обобщения (как для начинающего).
@Вячеслав-р1х7ж
@Вячеслав-р1х7ж 4 жыл бұрын
Дружище..ты супер... спасибо...за труд...
@matrix-u1n
@matrix-u1n 5 жыл бұрын
Спасибо,благодаря тебе понял делегаты,и это понял.Хотя не раз хватался за голову и откладывал разбор на потом
@НикитаОнищенко-ц4б
@НикитаОнищенко-ц4б 5 жыл бұрын
После 40-й минуты ничего не понятно,но очень интересно)))
@CODEBLOG
@CODEBLOG 5 жыл бұрын
А что именно не понятно?
@НикитаОнищенко-ц4б
@НикитаОнищенко-ц4б 5 жыл бұрын
@@CODEBLOG Трудно сказать...Я скажем так совсем новичек.И если что-то усложняется то теряю нить темы....
@Filkio
@Filkio 4 жыл бұрын
комменты напугали, но всё абсолютно доходчиво объяснено было) единственное что: с интерфейсами и структурами пока не знаком. в следующих уроках познакомлюсь) спасибо за уроки!
@valeriy786
@valeriy786 4 жыл бұрын
Еще раз большое спасибо за уроки!
@cartoonshow272
@cartoonshow272 4 жыл бұрын
Отличный видео урок! Спасибо!
@OpalGooDog
@OpalGooDog 3 жыл бұрын
Спасибо большое) Благодаря вам мой код лучше. А я больше знаю.
@archivfan
@archivfan 4 жыл бұрын
Спасибо отличный урок, всё понятно и по полкам...
@juliusmalkov9620
@juliusmalkov9620 6 жыл бұрын
честно не смотрел предыдущие видео ибо знаю азы, а это решил просто повторить, но блин я не знал ни прo TODO , ни про F12 что бы посмотреть структуру класса (List в данном случае ), а можно ли видео отдельное про фичи VS?)
@CODEBLOG
@CODEBLOG 6 жыл бұрын
Будет )
@bigdeiron3588
@bigdeiron3588 4 жыл бұрын
Спасибо Вам огромное!!!
@Foxy2002-s3l
@Foxy2002-s3l Жыл бұрын
Смотрю видео в конце 23 года)) пойду сейчас реализовывать класс с универсальным типом, в своем пет проекте) контент ох...й
@pavelsukhina7209
@pavelsukhina7209 5 жыл бұрын
Крутой дядька
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Спасибо )
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Но вот дядька... прямо старичком себя чувствую )))
@sashkosashok
@sashkosashok 6 жыл бұрын
Мне все понятно. Но потому, что я нормально так кодил на Java, есть знакомство с подобными вещами и я знаю, например, зачем используют интерфейсы. А так, интерфейсы пойдут следующими лекциями судя по плейлисту, а Template в лекции уже ограничивает интерфейс Enumerable. Непорядок)
@vladoss4643
@vladoss4643 2 жыл бұрын
А у меня компилятор ругается на запись: class Eating where T: Product . Видимо, потому что он считает, что тип Т - предается внутрь класса Product тоже. Но если написать: class Eating where T: Product - то он пишет, что не может найти пространство имен TT. И работает, только если писать так: class Eating where T: Product - например. А почему?
@GoLezhaShowMega
@GoLezhaShowMega 3 жыл бұрын
А где на гидхабе можно найти ?
@Jarzykk
@Jarzykk 4 жыл бұрын
Спасибо!
@urbans6
@urbans6 4 жыл бұрын
сначала лайк, потом запускаю видео)
@DeadRabbitCanDance
@DeadRabbitCanDance 4 жыл бұрын
26:30 А если нужно чтобы было два или три разных заменяемых типа в классе? Такое можно сделать? не один а два ? public class TestClass { public T1 Item1{get; set;} public T2 Item2{get; set;} }
@NeizBest
@NeizBest 4 жыл бұрын
Может быть, вы что-то не так поняли? Там же можно сколько угодно T перечислять, просто через запятую. Впрочем, вы уже должны были увидеть ответ в видео, так что непонятно, как вообще этот вопрос остался.
@ruslanpidhainyi9757
@ruslanpidhainyi9757 10 ай бұрын
Так, взагалі я бачив цей приклад який ти подав
@vitaly7196
@vitaly7196 4 жыл бұрын
Все хорошо, но на 49 минуте уже пошла каша, много намешано лучше немного потривиальней но лаконичней чем так усложнять. Есть возможность сделать сессию по Restsharp?
@PuishImov
@PuishImov 4 жыл бұрын
Я только одного не понял, что получается когда в Eating передаётся базовый класс Products? Когда передовался int было понятно что все T будут иметь свойство T но что получается когда передаётся Products?
@OnikMod
@OnikMod 4 жыл бұрын
Аналогичный вопрос.
@МихаилМатвеенко-н5е
@МихаилМатвеенко-н5е 3 жыл бұрын
Мы передаём Products, чтобы при создании экземпляра класса Eating мы могли бы указать любой из наследников Products (Apple или Banana). Это всё надо, чтобы потом мы могли вызвать метод Add и посчитать Volume. Предварительно создав экземпляр наследника. Просто раньше мы метод указывали в родительском классе и после вызывали у наследников, а сейчас мы под метод создали отдельный новый класс.
@VakulaEugen
@VakulaEugen 4 жыл бұрын
Рассмотрение Unity и WPF все еще в планах, или уже нет((?
@raiver6206
@raiver6206 4 жыл бұрын
+, хочется юнити...
@NeizBest
@NeizBest 4 жыл бұрын
Да. Стало сложнее, чем раньше. Но менее интересно от этого не стало))) (Только , похоже, пора уже печатать свою версию, чтобы толком разобраться в том, что здесь происходит)))
@axsuam
@axsuam 5 жыл бұрын
Спасибо.
@Sergioshe
@Sergioshe 4 жыл бұрын
Спасибо
@AN-ts4rf
@AN-ts4rf 4 жыл бұрын
вы эти примеры на гитхаб загружаете? если да то как их найти?
@CODEBLOG
@CODEBLOG 4 жыл бұрын
Да, все примеры я публикую на GitHub: github.com/shwanoff
@tandinio
@tandinio 5 жыл бұрын
Вадим, а как быть, если присвоил универсальный тип параметру (массе, например), а затем хочешь проверку написать? Компилятор говорит, что нельзя преобразовать в T Вот код: public abstract class Product { public string Name { get; set; } public T Price { get; set; } public T Volume { get; set; } public Product (string name, T price, T volume) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException($"Имя товара не может быть пустым!"); } if (price < 0) //ошибка { throw new ArgumentNullException($"Цена не может быть отрицательной"); } if (volume
@CODEBLOG
@CODEBLOG 5 жыл бұрын
рядом вроде бы был такой же вопрос ) как компилятор будет сравнивать число 0 с типом T? Т может быть и числом, и строкой, и человеком, и крокодилом. как сравнить число и крокодила? ) поэтому нужно сделать приведение перед такой проверкой
@NickM4195-o4l
@NickM4195-o4l 4 жыл бұрын
Привести можно таким методом: Convert.ToInt32()
@ret13dino
@ret13dino 4 жыл бұрын
@@NickM4195-o4l А где именно нужно проводить приведение??????
@crazygloom1391
@crazygloom1391 2 жыл бұрын
@@ret13dino Приветствую, подскажите нашли решение?
@amir_ibragimov
@amir_ibragimov 2 жыл бұрын
@@crazygloom1391 написали же, делать приведение
@Dhu43bdudhsnqdjfi483
@Dhu43bdudhsnqdjfi483 6 жыл бұрын
Есть ли возможность указание дефолтного значения для generic? Типа class Foo where TBar = int ? P.S. Этот код у меня не компилится
@CODEBLOG
@CODEBLOG 6 жыл бұрын
Нет, такого я точно не встречал )
@stendykng350
@stendykng350 6 жыл бұрын
можно указать структуру или же при наследовании от другого обобщенного типа указать явно его тип, который собственно будет присвоен классу-потомку
@victoriacare6156
@victoriacare6156 5 жыл бұрын
Привет! Как найти на githab исходный код HELP!!!!
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Ну вообще есть ссылка в описании канала, а так вот github.com/shwanoff/Lesson12
@victoriacare6156
@victoriacare6156 5 жыл бұрын
@@CODEBLOG Спасибо)
@kromarty
@kromarty 4 жыл бұрын
А как можно например собственную шаблонную функцию минимума сделать, чтобы он мог сравнивать тип T друг с другом?
@Fikusiklol
@Fikusiklol 2 жыл бұрын
Привет. 47:07 1. Какой смысл указывать generic у класса Eating метода Add, если ВСЕ поля Product у Product? Какой смысл скармливать наследников, если там новых полей нет. в данном случае абсолютно бесполезно и можно убрать. 2. Аргументом передаются интерфейсы, где уже любой класс, который реализует его, может быть передан аргументом. В том числе и его наследники. 3. В данном случае, если у тебя у любого наследника появится новое поле, то ты уже его использовать в этом методе не сможешь, даже с учетом, что там Product. У Product просто нет доступа туда. 4. В итоге ты полностью отошел от концепции того, что именно продакт должен содержать generic, нарушив несколько принципов ООП. Очень запутанно и непонятно обьяснил. В любом случае лайк, но к таким достаточно "мутным" темам лучше все таки готовить материал заранее. С 47 по 51 минуту смотрелось как уж на сковородке. Ничего личного.
@Денис-у1и4я
@Денис-у1и4я 4 жыл бұрын
Не уловил про ограничения. Зачем нам ограничивать по другому классу допустим, если ЭТОТ КОД: public class Calculation where T: Sphere { public void Calc(T figure) { figure.Total = figure.Radius * figure.Volume; } } И ЭТОТ КОД: public class Calculation { public void Calc(Sphere figure) { figure.Total = figure.Radius * figure.Volume; } } Идентичны по сути Я бы понял, если бы наследники класса , который является ограничителем ( здесь Sphere), тоже являлись ограничителем, но это же не так. Класс Sphere наследуется от класса Figure . Если написать public class Calculation where T: Figure, тогда в методе Calc произойдет ошибка и выдаст , что Т не содержит определения .Radius и .Volume. P.S. .Radius и .Volume - свойства класса Sphere P.S.S. Calculation where T: Sphere так нельзя написать, выдает ошибку. Calculation where T: Sphere и так нельзя тоже . Нужно явно указывать тип у Sphere,если класс Sphere в принципе имеет универсальный тип. И уже из этого выходит вопрос выше с 2 примерами кода
@paveldukov
@paveldukov 6 жыл бұрын
спасибо
@nowar8379
@nowar8379 4 жыл бұрын
Только при проверке входных параметров,ошибки летят,при применении Т
@Sozvic
@Sozvic 5 жыл бұрын
А можно видео про автоматизацию на C# или про MVC &
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Про MVC Точно будет. А что именно про автоматизацию интересует?
@Dhu43bdudhsnqdjfi483
@Dhu43bdudhsnqdjfi483 6 жыл бұрын
Какой класс описывает стандартные типы, чтобы принимать только int, string, а не какие-либо кастомные классы?
@CODEBLOG
@CODEBLOG 6 жыл бұрын
Конкретно для базовых типов нет, но можно использовать where T:struct. Это позволит использовать все структуры, а именно к ним относятся базовые типы (int, double, DateTIme и другие), а классы соответственно использовать будет нельзя. Но можно создавать свои структуры, поэтому это не 100% защита
@JustPlayingBroGD
@JustPlayingBroGD 6 жыл бұрын
А на практике в каких случаях удобно применять дженерики? В каких случаях и для чего их применяют чаще всего?
@Dhu43bdudhsnqdjfi483
@Dhu43bdudhsnqdjfi483 6 жыл бұрын
Удобно в случае использования адаптера. Ты используешь свой класс для нескольких возможных. К примеру, в unity мне нужно было описать кастомный метод поиска объектов по тому привязан ли к объекту определенный тип public IEnumerable Find() where T : MyObject. Это примерно вид метода. Очень удобно
@CODEBLOG
@CODEBLOG 6 жыл бұрын
На практике универсальные типы чаще всего используются, при работе с коллекциями. Это прямо №1. Далее они нужны для создания универсальных функций, когда нам нужно выполнять одинаковые действия над различными типами данных или хотим сохранить объект, но пока не знаем какой именно тип у него будет. На самом деле это достаточно скользкая дорожка, злоупотреблять шаблонами не нужно. если есть возможность обойтись без них - то лучше без них ))
@JustPlayingBroGD
@JustPlayingBroGD 6 жыл бұрын
@@Dhu43bdudhsnqdjfi483 Спасибо )
@JustPlayingBroGD
@JustPlayingBroGD 6 жыл бұрын
@@CODEBLOG Благодарю )
@caskol5704
@caskol5704 6 жыл бұрын
Ближе к концу стало вообще не понятно, что тут происходит)
@vladkorsak2163
@vladkorsak2163 4 жыл бұрын
наверно сейчас это уже детский лепет для вас?))
@pssp4450
@pssp4450 4 жыл бұрын
@@vladkorsak2163 первый раз был типа "чёёёё?" но после второго просмотра всё стало на ~85% понятнее.
@muslimurudzhaliev6053
@muslimurudzhaliev6053 5 жыл бұрын
что значить в вашей предметной области?
@minoddein7205
@minoddein7205 5 жыл бұрын
Дальше проходятся регулярные выражения?
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Нет, пока еще не снимал, но есть в планах
@stillshade6064
@stillshade6064 5 жыл бұрын
Дошел я до этого урока и мне уже страшно... Только я один вообще ничего не понимаю в программировании или ещё кто-то есть?) Это вообще пройдет или уже и не стоит дальше пытаться понять?)
@CODEBLOG
@CODEBLOG 5 жыл бұрын
А что именно не понятно? возможно нужно попробовать на практике поделать что-нибудь, хоть как-нибудь. Когда начинаешь пробовать руками понимание приходит быстрее
@stillshade6064
@stillshade6064 5 жыл бұрын
@@CODEBLOG я, скорее всего, если так правильно говорить, не понимаю архитектуру построения кода... Видимо мало времени ещё прошло) Ну и мне С# для Unity нужен, а там свои нюансы есть.
@1pampers13aby7
@1pampers13aby7 4 жыл бұрын
Тут через БоОль НеПонимания! Там 30% теории и 70% практики. И из этих 70% в большей степени ты сидишь и пытаешься вникнуть/ понять(методом тыка), сидишь тупишь. Но все таки это дает свои плоды, пусть даже урожай не велик
@vallJune
@vallJune 5 жыл бұрын
Ковариантность и контрвариантность хотелось бы
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Думаю в будущем записать отдельное подробное видео с кучей примеров на эту тему
@eugenekrutoy1475
@eugenekrutoy1475 4 жыл бұрын
Я немного не понял, ограничение на конструктор без параметров, но насколько я знаю, если в классе нет конструктора, компилятор автоматом создает конструктор без параметров. Не понимаю, т. к новичок, то есть он явно должен быть объявлен? Если да, то появляется вопрос, а нахрен это вообще нужно. Извините за, возможно, глупый вопрос🙂
@viktarvarabei6079
@viktarvarabei6079 3 жыл бұрын
Если в классе объявлен конструктор с параметрами, то конструктор без параметров нам надо объявлять явно, если в классе конструктора никакого нет, то конструктор без параметров объявляется неявно(мб кому пригодится)
@user-io9iq2di4w
@user-io9iq2di4w Жыл бұрын
А вот и первые трудности, после ключевого слова where мозг уже поплыл
@atler9865
@atler9865 4 жыл бұрын
Еще проще перейти в реализацию класса если нажать Ctrl + LKM по классу на который хотите перейти
@atler9865
@atler9865 4 жыл бұрын
P.S. Уроки топ. Надеюсь позже будут интенсивы по созданию сайта, сервиса или чего подобного на разных технологиях (AWS, .NET core, ASP.NET core, и тд)
@denismetak5390
@denismetak5390 2 жыл бұрын
После этих курсов, я сразу нашёл работу на галере за 100500 тыщ
@vallJune
@vallJune 5 жыл бұрын
T пошло от Type по крайней мере это у Рихтера
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Да, а у MSDN их обобщенными шаблонами тоже называют, поэтому точно узнать не получится ) но это не так принципиально важно )
@fillmike
@fillmike 3 жыл бұрын
топ
@Вячеслав-р1х7ж
@Вячеслав-р1х7ж 4 жыл бұрын
Народ, подкиньте тему для домашки? У кого какие мысли.
@DeadRabbitCanDance
@DeadRabbitCanDance 4 жыл бұрын
тут соответсвенно мы можем .... ммм... а блин, тут конструктор я забыл определить. Набираем 5 минут непонятно что. а блин это мы сотрем в этом случае... а мммм а тут обратите внимание что мммм...м ммм... мм это я удалю. это мы можем сделать даже вот так вот. сейчас поменяем конкретно для этого примера, удаляем всё что относится к темплейту. делаем уже наследование от класса без темплейта, потому что почему то не смогли записать синтаксис наследования от класса с темплейтом и ничего не понятно. вот. и теперь. теперь наконец то... мммм... эээ.... В итоге полная каша и ничего не понятно. Смотрел три раза и ничего не понял. Код в итоге подчеркнут интелисенсом как некорректный... Ладно, не будем сейчас в это углубляться. И так уже намудрили.... Что такое интерфейс? Про него ничего не было сказано! Как сделать ограничение, что тип может быть int или float или decimal, но не может быть double ? Наверно хорошо бы перед созданием нового класса сначала сказать что он ДОЛЖЕН делать, а потом как мы это реализовываем.
@Dhu43bdudhsnqdjfi483
@Dhu43bdudhsnqdjfi483 6 жыл бұрын
Зачем использовать dictionary, когда есть class? Все-таки class меньше весит. Да и если используешь dict, то практически в 80% случаев все равно знаешь какие поля будут заданы?
@CODEBLOG
@CODEBLOG 6 жыл бұрын
Видимо ты не совсем правильно понял, что такое словарь. его можно себе представить как список, но кроме самого значения у тебя есть и ключ, по которому можно быстро получить значение. Пример использования словаря, ключ - логин пользователя, значения - все данные о пользователе в системе. При авторизации по логину, можешь получить все данные конкретного пользователя. при этом ты автоматически будешь контролировать, чтобы второго пользователя с таким логином не было. Да, это можно написать вручную своим классом, но зачем изобретать велосипед, если есть готовая надежная реализация? )
@xSPESHERx
@xSPESHERx Жыл бұрын
Автор, вернись пожалуйста. 😢
@someonewhoyoudontknowiguess
@someonewhoyoudontknowiguess 6 жыл бұрын
Что то я не понял где свободное общение...
@igorcoolman
@igorcoolman 4 жыл бұрын
не до конца объяснил и продемонстрировал работу ограничений
@KirillCheremisin
@KirillCheremisin 4 жыл бұрын
блэд, он все это время смотрел в другую сторону!)
@spaicyworld9113
@spaicyworld9113 4 жыл бұрын
я запушу вижуалку а вы пока *включается реклама*
@callpack96
@callpack96 5 жыл бұрын
димуня был здесь
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Привет, димуне :)
@Dhu43bdudhsnqdjfi483
@Dhu43bdudhsnqdjfi483 6 жыл бұрын
T - сокращение от type
@CODEBLOG
@CODEBLOG 6 жыл бұрын
Разные источники говорят по разному. Я находил и Type, и Template. Но суть от этого не сильно меняется
@stendykng350
@stendykng350 6 жыл бұрын
По сути это просто общепризнанный вид записи, а так ты можешь тулить что угодно вместо T, лишь бы не было пересечения с другими типами.
@ivanomelchenko1895
@ivanomelchenko1895 4 жыл бұрын
+++
@mechanism-o4h
@mechanism-o4h 2 жыл бұрын
Ну такое... рассказывать тему и не разбираться банально в синтаксисе, чтобы потом съехать, мол "это не важно". Интересно, как те, кто обучается, из этого урока должны вообще чему-то научиться для меня загадка, если честно. Думаю, что на собеседовании такой ответ точно не прокатит.
@ПавелСоболев-л5ц
@ПавелСоболев-л5ц 2 жыл бұрын
Спасибо
@benya4396
@benya4396 5 жыл бұрын
Вадим, а как быть, если присвоил универсальный тип параметру (массе, например), а затем хочешь проверку написать? Компилятор говорит, что нельзя преобразовать в T Вот код: public abstract class Product { public string Name { get; set; } public T Price { get; set; } public T Volume { get; set; } public Product (string name, T price, T volume) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException($"Имя товара не может быть пустым!"); } if (price < 0) //ошибка { throw new ArgumentNullException($"Цена не может быть отрицательной"); } if (volume
@CODEBLOG
@CODEBLOG 5 жыл бұрын
естественно он не может так проверить. на месте T может быть абсолютно любой тип, и как компилятору сравнивать с числом 0 например крокодила )))
@benya4396
@benya4396 5 жыл бұрын
@@CODEBLOG Спасибо за ответ, собственно мой вопрос - копия другого, свой фрагмент уже лень было выдергивать. В целом, я так и думал, но до последнего жила надежда, а вдруг есть какая-то хитрость!)
@crazygloom1391
@crazygloom1391 2 жыл бұрын
@@benya4396 Друг напиши пжт как решил данный вопрос
Интерфейсы C# (Interface) - Учим Шарп #13
1:06:58
REAL or FAKE? #beatbox #tiktok
01:03
BeatboxJCOP
Рет қаралды 18 МЛН
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН
Что-что Мурсдей говорит? 💭 #симбочка #симба #мурсдей
00:19
C# 11 - Generic Math(s)
17:58
Coding Tutorials
Рет қаралды 4,5 М.
Что должен знать C# Junior разработчик?
9:33
Sergey Nemchinskiy
Рет қаралды 113 М.