Вы видите копию треда, сохраненную 2 февраля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— WPF ( https://docs.microsoft.com/ru-ru/dotnet/desktop/wpf )
— WinForms ( https://docs.microsoft.com/ru-ru/dotnet/desktop )
4. С# для игр
— Unity-тред в /gd/
— Учебники https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: >>2484368 (OP)
— Для Windows Visual Studio ( https://visualstudio.microsoft.com/ru/downloads ). Также есть версия для macOS.
Кроссплатформенный IDE Rider ( https://www.jetbrains.com/rider ).
Если в C# хочется, но пк уж слишком хуёвый: https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code
8. Что нужно знать, чтобы взяли работать?
— Общие навыки — TPL, Linq, DI, интеграционные тесты. Преимущество перед такими же вкатунами даст парочка интересных пет-проектов где вы делаете всё максимально правильно и точно следуя архитектуре.
— Архитектура — DDD, микросервисная архитектура. Так же необходимо ознакомиться с паттернами проектирования. Обязательны к изучению: MVVM, MVC.
— Базы данных — PostgreSQL/MSSQL + Mongo/Redis. Из ORM: EFCore обычно достаточно, но есть более быстрый, но менее удобный Dapper. Тратить время на ADO.NET не стоит.
— Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках.
— Структуры данных — связанные списки, деревья (бинарные, красно-чёрные), хеш-таблицы, графы.
— Системы контроля версий — обычно гита достаточно.
Нет. Using выучи и во что он разворачивается.
А правда, что не нужно писать самому код для работы с БД, а он сам генерируется командой в консоли?
Даун, ты тег проебал
у меня есть класс в котором имеется лист из ConcreteNode
я отдаю его другому классу через интерфейс, а он дергает интерфейс на ConcreteNode и вызывает метод
метод Tick() на этом классе вызывается +- 90-120 раз в секунду, когда и сколько раз конкретно заранее неизвестно
если лист который я отдаю из Repository изменится(ConcreteNode будут добавляться-убираться по индексу через эвенты на который там подписано), хватит ли проверки на null перед ProcessNode() или нужно как-то хитрее идти?
ох ты и понаписал
да какая разница сколько в секунду.
у тебя многопоток что ли? есть состояние гонки?
если да, то от этого и пляши. тебе же ВИДНЕЕ
Из твоего скрина и описания вообще хер понять.
>ConcreteNode будут добавляться-убираться по индекс
на скрине оно вообще закоменчено и не используется.
Если все же многопоток, то всегда думай с точки зрения "а если изменится"
например ты проверяешь на нулл на хер знает какой строк (тебе лень было номера строк захватить что ли) и далее берешь итератор от этого. Есть ли шанс что за это время не нулл снова станет нулл?
Вот ты взял итератор и итерируешь. Есть ли вероятность, что содержимое списка изменится? Если да, то итератор это не любит ибо List не threadsafe, тут нужно иммутаблелист
Ок. изменится не содержимое списка, а сам список. Должен ли обход это учесть и прерваться ради нового списка или дойти до конца? А если дойти до конца, то есть ли вероятность что список еще раз сменится и один из списков будет просто потерян.
хз что вообще делают null в списке. ЗАЧЕМ ВООБЩЕ ДОБАВЛЯТЬ
null в список???
Ну а также не забывай про channel/blockingcollection
Чем бегать проверять "а нет ли чего" лучше использовать очереди с уведомлением
я реально не шарю нихуя. у меня не многопоток, тут может быть состояние гонки?
например вот у меня итерируется одна версия листа
а в это время приходит эвент который активирует метод, который сносит одну из ConcreteNode из листа. лист итерируется на старых данных, а затем на новых?
>на скрине оно вообще закоменчено и не используется.
так закоменченое сидит в другом классе который этот интерфейс использует, я его для наглядности приложил
А нужно шарить. кто из нас телепат? ответ: никто
В одном потоке не может работать сразу 2 разных кода.
Если у тебя везде 1 поток, значит код, который выкидывает событие, не сможет работать пока идет вот эта итерация.
А значит список никогда не будет изменен, да и нуллабле его делать нет смысла - лучше присвоить дефолтное Array.Empty<> и проверка на нулл станет не нужна.
Если у тебя событие может быть выполнено посреди итерации, то это уже самый настоящий многопоток. И тут да - будет "сначала доитетрирует на старых, а потом будет на новых (причем за это время новые могу смениться несколько раз)"
Я без понятия что делает твой код. Но если бы делал я что то типа "вот оно вжух событие и там бац обходит в цикле и повторяет", то, во-первых, там была бы очередь (ну чтобы не птерялось ничего), а во-вторых там была бы очередь типа Channel чтобы не городить огород с "я тут очередь опустошил и теперь постоянно проверяю есть чё"
То есть реализация стандартного Producer-Consumer
1 есть общая очередь канал или блокколлекция
2 сервис1 может генерить событие или может знать по очередь прямо (пофиг) - суть в том, что на событие он просто кладет ноду в очередь и идет дальше заниматься своим делом
3 в то же время сервис2 выгребает эти ноды и что-то с ними делает
Ни одна нода не будет потеряна, не будет лагов на событии и вообще это просто стандартно и удобно
>а в это время приходит эвент который активирует метод, который сносит одну из ConcreteNode из листа. лист итерируется на старых данных, а затем на новых?
Итератор выкинет эксепшон - коллекцияю нельзя менять во время итераций.
Самый простой способ обойти это - делоешь копию коллеции по которой надо итерироваться и ей уже не грозит краш, если прилетят или удялятся ноды. Потом надо будет отдельно как-то обработать новые ноды, но ты сам думай как это сделать.
Про юзинг правильно написали, это очень любят спрашивать. А так смотря что ты называешь сахаром.
>>16224
>За солид ебешь?
Не ебу, но иногда спрашиваю. Желательно всё же понимать что там за принципы, к тому же они не особо сложные, 2 минуты на вики буквально дадут понимание.
>Лайвкодить заставляешь?
Не, я не делаю то, что ненавидел сам. У нас есть идея давать кандидатам код, чтобы они делали лайв код ревью - вот эта штука кажется мне гораздо более показательной и не такой напрягающей.
>>16242
В Dapper например пишут прямо sql код для работы с БД, и иногда это оправдано. В EF действительно всё под капотом. В остальном хз о чём ты, может не работал с такими технологиями.
>>16281
Если ты сидишь на десктопе тебе виднее какой там рынок. Нормально специализироваться на чём-то одном, я вот ничего кроме asp.net core считай и не делаю.
Не совсем по собесам, но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)? А то на большинстве вакансий trainee\junior просят ангуляр\реакт.
И насколько хорошо вообще шарписту надо знать JS? Я то вроде в ангуляре могу компоненты накидать, но нравится не сильно. А если будет react\vue и без TS то вообще боль :(
а ты не иди туда, где с тебя еще и фронт просят. Вот просто не иди - спрашиваю больше, а оно тебе надо?!
>В EF действительно всё под капотом.
Хм. В EF точно так же можно чистым sql-м хуярить при надобности. Ну а то, что под капотом, вполне спокойно в отладчике смотрится во что оно преобразуется.
>но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)?
С нуля практически малореально. Вот где-то через год-полтора работы недофулстеком вполне уже можно.
Просто по опыту сейчас на рынке очень мало контор в коотрых одновременно было бы и толковое разделение на фронт/бэк и чтобы им требовались безопытные джуны.
Вполне реально влезть в контору где ты будешь у тебя разделение обязанностей бэк/фронт будет где-то 70/30. А оттуда уже потихоньку двигаться в сторону чистого бэка.
>И насколько хорошо вообще шарписту надо знать JS?
В принципе достаточно знать как запрос с фронта на бэк и обратно ходит. Плюс уметь пользоваться отладочной консолью браузера.
>Не совсем по собесам, но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)?
Сейчас скорее оче сложно. После пиздеца много рабочей силы появилось. Половина челиков которых собеседую говорят, что их проект закрыли/сократили/убрали премии. И это не джуны.
>И насколько хорошо вообще шарписту надо знать JS?
Хз. Я онли бэк пишу, на JS писать могу, но знаю очень поверхностно, собес по нему точно не пройду. Чо тебе кстати реакт не нравится? По мне так скорее ангуляр это неудобная хрень.
>>16590
Всё так. Я бы правда чистого SQL в EF пытался избегать насколько можно.
>Всё так. Я бы правда чистого SQL в EF пытался избегать насколько можно.
Я бы чистого SQL в любой ORM избегал бы до самого последнего.
Вся суть ORM как раз в том, чтобы как можно меньше касаться SQL напрямую.
Зачем вообще нужен sql и ебанина с СУБД? Какой от них профит по сравнению с обычной файловой системой в качестве бд? Там кроме индексов и транзакций что-то полезное еще есть?
Меня не отпускает крамольная мысль, что БД это какой-то оверинжиниринг со своим языком, форматом файла, и подходом к проектированию базы. Реалиционна хуйня не всегда удачно ложится на бизнес-логику и приходится страдать.
В одном бложике прочитал, что хорошо организованая файловая система уже неплохая БД. Есть производительность, надеженость, кастомные дата-стримы позволяющие привязывать к файлам произвольныке метаданные и обрабатывать их например по тегам или еще как-то хитро.
Еще вспоминаю опыт в геймдеве - никакой СУБД-поебистикой для данных не занимались. Хранили все данные в зип-архивах с логической структурой подходящей проекту. Довольно гибко и удобно.
Закинь в какой-нибудь каталог пару миллионов текстовых файлов и сделай по ним полнотекстовый поиск, потом снова приходи.
а он такой скажет - я сделаю индекс. вот тот же поиск виндовый он ведь файлы индексирует, но файлы остаются файлами.
Назови попробуй их Books и Authors просто, кмк еф хочет создать для твоего м2м промежуточную таблицу, которая как раз называется либо BookAuthors либо AuthorBooks и сосёт. Переименуй кароч проперти
Разобрался, проблема была в том, что помимо списка авторов у меня было поле "Руководитель проекта" также типа Author. Убрал поле - всё заработало. Но оно то всё равно мне нужно.
Git
Если тебе пофиг на историю изменений просто скопируй один каталог поверх другого, измененные файлы заменятся, те которые не изменялись - останутся теми же.
>А так смотря что ты называешь сахаром.
Дак в том и вопрос, что не понятно что учить, а что нет. Та же джава хороша тем, что легко учится, т.к. содержит мало конструкций. А в шарп их надобавляли дофига. Некоторые на мой взгляд просто избыточны и лишь ухудшают чтение кода. А вот код на джаве, хоть и многословный, но всегда легко читается.
Всё учи
ConfigureAwait так и не засахарили
using тупо не может сделать 2 var disposable в одном выражении. нужно 2 using. возможность опустить скобки не является решением.
if не является выражением. Тернарный оператор здорово, но не для сложных конструкций
new
Делегаты и евенты слишком сахарные. Я конечно разобрался, что там в основе те же функциональные интерфейсы как в джаве, но всё равно в голове сложно укладывается.
Jooq, либо jdbc, да. Это если от хуйбирнейта отказаться.
Нормально. Они наглядные, прямо в коде видно их, а в сишарпе всё по десятью слоями абстракции.
Да какие асбтракции-то. Делегат - это обычный типизированный коллбек, безопасный аналог указателя на функцию из плюсов. Совершенно ясный и понятный. А нагромождение костылей в жабе - этот как раз обход недостатка дизайна языка, где это изначально не было продумано.
Это для маленьких кривеньких проектиков, долгая жизнь которых не предусмотрена. Т.к. естественная жизнь многих проектов в это не укладывается, создателям orm-ов пришлось придумать микросервисную архитектуру.
Юзай HostedService. В нем и инициализируй.
А в шарпе типа пипец продумано лол.
Вот прямо щас
Я могу
Array.Sort(_values, (x, y)=> x.CompareTo(y));
но не могу
Array.BinarySearch(_values, keyTuple, (x, y) => x.CompareTo(y));
потому что для Sort есть перегрузка с делегатом, а для BinarySearch нету, ему IComparer подавай, который как раз тот самый функциональный интерфейс с одним методом и он НЕ ПРЕОБРАЗУЕТСЯ из (x, y)=> x.CompareTo(y), ведь у нас тут не жава, а шарп.
Так что костыль это или фича - крайне спорно. Лично я считаю что это фича и я бы хотел видеть такую и в шарпе.
ну то есть костыль ага
Вместо удобного "я передал лямбду, а компилятор сам все сделает" я должен использовать длинный костыль в виде явной фабрики (только потому что автор класса не сделал очевидную перегрузку)
И после этого они над функциональными интерфейсами смеются ха ха.
ты только зацени уровень портяночности
var index = Array.BinarySearch(_values, key, Comparer<KeyValuePair<TKey, object>>.Create((x, y) => x.Key.CompareTo(y.Key)));
и
Array.Sort(_values, (x, y) => x.Key.CompareTo(y.Key));
У меня от первого варианта глаз дергается. Ширина пипец. Про читабельность вообще молчу
Ты мог бы доебаться до дизайна Array.BinarySearch, не умеющего в делегаты, но за каким-то хуем доебался до самих делегатов.
Функциональные интерфейсы - это тупо костыль, чтобы не добавлять в жабу делегаты, которые так сложно добавить из-за говнокода в JVM и политики оракла тормозить развитие жабы.
до делегатов доебался не я.
я просто мимо проходил и показал что НЕ СТОИТ высмеивать фичи из других языков которые неплохо бы и в шарпе видеть.
>это тупо костыль
А вот лично для меня костыль - как раз Comparer<>.Create()
ведь хули один из БАЗОВЫХ классов шарпа даже в последней версии дотнета не принимает делегат (которые существуют аж с версии дотнета 1.1)
И вообще фича удобная, ведь тупо пришлось бы делать меньше перегрузок метода и такой херни как с BinarySearch просто не было бы.
>которые так сложно добавить из-за говнокода в JVM
это оффтоп конечно, но я без понятия о чем ты. Я не знаю жаву, я юзаю котлин и там совместо сосуществуют и всякие там (Int)->Long (аналог Func<int, long>), так и эти функциональные интерфейсы. И JVM как то не мешает. Да и вообще как она может мешать, если это на уровне компилятора решается - компилятор просто может переписать лямбду в интерфейс и сам и на бинарном уровне будет одинаково.
Нет, только сеньорам, джунам достаточно уметь выводить хеллоуаорлд в консольку. Милдлы уже могут объявлять свои переменные и даже писать свои методы.
джун должен понимать и уметь писать базовый код. вот как пример на скрине. Иначе это не джун, а дворник
Я раньше путал ASP.NET MVC 5 и ASP.NET Core для .NET 5. Почему у Микрософт такие дебильные названия?
ASP.NET Core надо было по-новому назвать. К примеру, Autumn. Были бы разные модули типа: Autumn MVC, Autumn Data (вместо EF), Autumn Cloud для микросервисов всяких.
Кто Either и прочую манду протаскивал в проекты?
Как объяснить тем кто с сей начинал, что пиздато же выходит с мандами?
Так красивше же:
async Task<Either<Result, Error>> Foo()
{
...
if(!valid)
return new ValidationError();
return new Result();
}
а наверху:
(var res, var error) = await Foo();
if(error is not null)
{
_logger.LogError(error);
return;
}
Process(res);
А какой выход ты видишь лучше, кроме как делать уродство в виде:
abstract ActionResult<T>
ErrorResult<T> : ActionResult<T>
OkResult<T> : ActionResult<T>
?
Вот это как раз уродливо в конечном варианте выглядит.
Или по твоему - все методы - всегда возвращают однозначный результат? Или может - нужно на каждый чих - кидать исключения?
Как по мне - с мандами - красивше выходит и удобнее.
>>18132
Так это проблемы по перформансу. А не прошедшее валидацию сущности - не являются исключительной ситуацией. Исключение нужно бросать, внезапно, в исключительных ситуациях, например - база недоступна, тут действительно надо кинуть исключение, чтобы на самом высоком уровне- перехватить его и прекратить обработку.
Если на каждый чих кидать исключение то оно уебищно выглядит + сразу большие проблемы с производительностью.
>А не прошедшее валидацию сущности - не являются исключительной ситуацией
Я думал ты это в качестве примера привел. Тогда просто дизайн функции кривой, она и валидирует, и ещё какой-то другой такой же штатной работой занимается. Нужен рефакторинг - валидиацию в одно место, работу в другое (и выше по стеку и определяется что делать когда валидация просрана, что - когда нет).
Приведи другой тогда пример, где нужен этот either на твой взгляд.
>var index = Array.BinarySearch(_values, key, Comparer<KeyValuePair<TKey, object>>.Create((x, y) => x.Key.CompareTo(y.Key)));
Ты написал говнокод.
Я бы тебе за такое на ревью лося бы пробил сапогом.
1. Делегат и компарер должны быть предварительно объявлены отдельными переменными с понятными названиями и комментариями при необходимости.
2. var index? Кто JS-петуха пустил в мою решоточку? Почему был не написать int вместо var? Длина такая же. Ясности больше. var указывается только там, где тип очевиден. Например var sb = new StringBuilder(). Но и это уже не актуально в новых шарпах. Поэтому по сути хорошим тоном является везде явно указывать тип, а var писать может быть только в Linq'е.
В ide тип указывается рядом с объявлением переменной, писать самому его нет смысла.
Это когда либо он всплывает через несколько секунд по наведению пойнтера (охуенно удобно), либо дублируется var, а серенькими букофками ещё добавляется тип. Просто заебись. Правда, при ревью пулл реквеста в браузере, например, нихуя ни всплывает, как и при просмотре истории, но ничего.
А ещё можешь почитать для чего ms вообще высрал этот var, и это совсем не для того, чтобы совать его везде при каждом удобном случаче.
>выполнять какие-то простенькие заказы
Какие заказы? На шарпе фриланс мертв. Это ентерпрайз решение для штатных сотрудников, как и джава. Мелкие задачи в одно рыло на нем не решают.
В лучшем случае будешь на фреймворке 4.6.1 пилить для пиндоса надстройку к аутлуку или екселю.
Учи пхп, если хочешь с заказов кормиться.
>какие именно конструкции по твоему избыточны?
Пикрилы уебищны и уродливы.
Зачем такие вырвиглазние брайнфак-лайк решения наспех впихивать в язык мне не понятно.
Некоторая экономия строк кода за счёт убийства читабельности и интуитивности понимания и тем более написания таких конструкций.
>Делегат и компарер должны быть предварительно объявлены отдельными переменными с понятными названиями и комментариями при необходимости.
Кому должны? с хера ли? ты и в LINQ вместо каждой лямбды обьявляешь?
Чел, ты можешь в своих петпроектах срать как тебе вздумается.
Просто когда твой код будут читать другие люди, не нужно делать так, чтобы они тебя ненавидели, и считали необученным и безграмотным идиотом.
Если в твоём коде появляется конструкция типа ))) - три и более скобки подряд, то это например один из верных маркеров того, что это сложно будет читать и понимать, читателю придется останавливаться и разбираться что во что вложено, а может быть даже копировать из браузера код в текстовый редактор и там разбивать на блоки, чтобы прочитать.
Поэтому очевидным решением будет выносить отдельные вложенные сущности в самостоятельные переменные.
Линк при грамотном написании не имеет таких проблем и там это не требуется, как правило.
>Если в твоём коде появляется конструкция типа ))) - три и более скобки подряд
ну так поэтому я и хейтю что нет функциональных интерфейсов, а эти костыли
и когда тебя ВЫНУЖДАЮТ мудрить с именаи, то это говно язык
>нет функциональных интерфейсов
Где их нет? В стандартной либе? Так там дохуя чего нет, даже не смотря на то, что стандартная либа шапра из коропки даёт столько всего, что другим языкам и не снилось, и в которые в отличие от шарпа в каждый проект приходится тянуть зависимости от дикого зоопарка разномастных либ.
Зато можно допилить самому или сделать обертку или сделать аналог или скачать нугет пакет, если кто-то уже озаботился проблемой.
Сам по себе язык сишарп поддерживает функциональные интерфейсы, типа IComparer. Можно даже запилить какой-то свой обобщённый класс с имплисит кастованием его интанса из делегата.
Так что я не очень понимаю, на что ты жалуешься. На отсутствие вожделенных перегрузок в стандартной либе грех жаловаться.
>Сам по себе язык сишарп поддерживает функциональные интерфейсы, типа IComparer
их нет в шарпе. он не скастит сам (x, y)=> в IComparer
поэтому и приходится использовать портяночную фабрику вместо "компилятор за меня это сам переписал"
>На отсутствие вожделенных перегрузок в стандартной либе грех жаловаться.
ну так то да. всего то пара десятков лет прошло с момента рождения класса Array и делегатов
И можно было бы сказать, что не знал автор класса по делегаты, но в Array.Sort он есть.
Каждый раз как вижу пхп у меня начинается какая то огрессия, и зубы скрипят.
А вообще, разве шарписты не нужны тем же юнитистам? Модуль какой нибудь захуярить им время о твремени разве не требуется?
так любой джун понимает. учись еще
>Какие заказы? На шарпе фриланс мертв.
Не совсем так. Он не мертв, он скорее в тени. Вполне возможно найти какую-нибудь подработку, вроде написания пары-тройки микросервисов для какой-нибудь мелкой (относительно энтрепрайза) конторы за более-менее нормальный прайс. Но только по знакомству. С улицы в такие проекты никого не берут.
>>18316
>А вообще, разве шарписты не нужны тем же юнитистам? Модуль какой нибудь захуярить им время о твремени разве не требуется?
Нет, там своя атмосфера. В геймдеве (особенно на юнити) кодерских задач как таковых не особо много, все что нужно вполне решается силами пары-тройки штатных макак.
>Почему у Микрософт такие дебильные названия?
Просто у них в отделе нейминга продуктов какой-то рептилоид сидит (наверное брат того который названия в IKEA придумывает)
У них абсолютно всегда и во всех продуктах была хуйня с неймингом. Что в досе, что в винде, что с МС офисом, что с консолями. Смирись.
Что нет?
То что это исторически сложилось, никак не отменяет ебанутости нейминга во всех линейках продуктов Майкрософта.
>Помогло в итоге только удаление бд, всех миграций и создание бд начисто.
Ну, на этапе разработки ситуация "да заебало бля, короче я дропаю БД и все миграции и делаю единую" - очень часто встречается. Так что норм.
Но конкретно этот случай не относится к чудищу из икеи который клонировал мелкософт
Тоже с этого жопа горит. Какие-то хипстерки тащат парашный стрелочный синтаксис из функциональных языков. До дебилов не доходит, что уже есть православый switch, а более сложные случаи ПАТТЕРН МАТЧИНГА должны быть спрятаны в полиморфные вызовы методов объектов.
>есть православый switch,
а он тут причем?
>а более сложные случаи ПАТТЕРН МАТЧИНГА
и он тот же тут причем?
паттерн-матчинг - сокращают цепочку развесистых if
>а он тут причем?
Да все при том же. Весь синтаксический сахар стрелочек компиляется в свичи/ифы.
>паттерн-матчинг - сокращают цепочку развесистых if
В тру объектном дизайне развесистых ифов не должно быть.
Какбы плохая практика патерн матчинга - пытаться проверить сразу много данных на месте, вместо упаковки их инвариантов и проверки их одним семантическим методом. Это наследие из тех времен когда были списки, но не было объектов с поведением. В списки могли засунуть всякую херень. Нужен был гибкий способ их фильтровать на предмет ошибок и дальнейшей обработки. В ОО-языке наличие патерн матчинга это шаг назад, разрабы натурально лезут обратно на дерево функций с которого только недавно слезли.
>Весь синтаксический сахар стрелочек компиляется в свичи/ифы.
ммм. в этом наверное и есть суть сахара как сахара )
Предлагать взамен то, от чего сахар должен спасти - ну такое себе
>В тру объектном дизайне развесистых ифов не должно быть.
>ОО-языке наличие патерн матчинга
внезапно люди пишут НЕ ТОЛЬКО крайне высокоуровневый код. И этим все сказано.
Каждой задаче - СВОЙ ИНСТРУМЕНТ.
Считать, что в коде не должно быть развесистых иф - ты там формошлепаешь что ли? да любой алгоритмический код или работающий с рефлексией и кодогеном, да всякие сериализаторы кастомные просто перенасыщены разными ифами.
https://vk.com/doc44301783_525415153?hash=pJDlsZlDIqqRXwvL5bO5uyXzGp3zx7SzQsWsxxTsqfc&dl=1DgZwktH4Y4b3w1gkWVHCCIwiMi9JkcBnlO99oF56bo
Хрена себе. А ведь только летом по net 5 выпустили.
при подписке на кого-то этот кто-то удерживает тебя пока сам жив и не дает тебя скушать.
А значит если контрол удалился, то его ссылка на тебя не препятствует тебя сожрать.
Блин. Я перепутал версию языка и дотнета. Сорян, тупанул.
— Ко-ко-ко я топчусь на месте
— Как тебе цель: изучить английский?
— В смысле? Я хочу, чтобы вы сами сдвинули меня с места
Прости, что пришлось расписать банальные вещи.
Ну а в обычных событиях контрола где в code-behind этого же контрола хендлер - там контрол ссылается сам на себя, то есть такое GC выглядит как циклическая ссылка, что не мешает собрать мусор.
Поэтому контролы обычно ничего не удерживают, если ты сам не постараешься что-то захватить.
конечно если ты в контроле сам подписался на какой то синглтон сервис - он будет держать тебя (контрол как подписчик) вечно если забудешь отписаться (что кстати нихрена не тривиально ибо событие выгрузки контрола не очень такое себе нормальное - у меня вот lifetime-ы и когда контрол выгружается, то лайфтайм протухает и все автоотписывается и мне пришлось городить огород чтобы работало нормально)
к вьюмоделям контролы подписываются через биндинги и там работают слабые ссылки.
Исключение - не OneTime биндинг к свойствам без INPC - то есть если биндинг к чему то, что не поддерживает INPC, например ты биндишься к IList то без OneTime у тебя будет утечка.
>то его ссылка на тебя не препятствует тебя сожрать
Сборщиком мусора?
Но когда я вручную подписывался внутри контрола, то было очень много случаев, когда контрол продолжал существовать, даже когда я удалял на него ссылку.
Чел писал про книги, которые не переведены. Ну наверно их.
Если объект держит на тебя ссылку, но сам объект был скушан GC, то и ссылка на тебя исчезла.
При обычной подписке ссылку на тебя удерживают через делегат, что просто немного косвенности, но смысл не меняет.
>даже когда я удалял на него ссылку.
ссылку откуда?
Подписки контрола обычно в его же code-behind - умирают вместе с ним
всякие атачед пропертис если они приатачены к контролу и нигде ты не закрепил их - тоже умрут вместе с контролом.
Если ты не плодишь код, где в коде рождаешь контролы или захватываешь ссылки на контролы и этот сам код не прилепляешь к чему то долгоживущему, то проблем нет
типичный двачер, я ему говорю про то, что для других языков дохуища курсов/книг/сайтов для изучения, он мне говорит выучить англ. язык. Если что, выученный мной английский не увеличит количество ресурсов на русском и не улучшит их качество, чини логику.
И да, я не говорил, что не учу англ./не собираюсь учить англ, я говорю про то, что нет ресурсов, какое "сами сдвинули меня с места", ты чет ваще дебил какой-то...
целый час? да ну нахер.
хватает БРЕДОВОГО комента от @generalchannel6740 под видео чтобы понять что смотреть не стоит.
Вообще дикий комент там
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент.
Верно. Он не нужен упоротым, поросшим мхом, жавистам, любящим писать длиннннно и много.
>Во вторых java опенсорс, линуха
Ну тут как бы можно и не читать дальше ибо и так все понятно
> В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM.
А тут в прошлых тредах жаловались именно на необходимость тюнинга JVM.
про type erasure будем вспоминать? нет, ну и ладно
>и не заморачиваться над более узкими оптимизациями
структуры были изначально. Далее Span/ref, дотнет 7 вообще вышел под лозунгом "не нужны нам новые фичи, даешь оптимизацию"
>и безопастностью которая у шарпов слабее
хз о чем это он. особенно после нашумевшей истории с log4net
>Видим nхибернейт стартовал на java, стиздили на шарпы.
ммм и чо? для жавистом же - им же проще переходить. А так кто юзает хибернейт? стандарт это EF
>elasticsearch - java, Jira - java, Jenkins - java, Kafka - java
а гитлаб внезапно руби. И чет НИКТО не переписывает на жаву, на такую замечательную жаву.
>То что крупные компании используют java тк раньше не было выбора - смешно.
мда. ой дурак.
>async await? Может стоит осторожнее с многопоточным работать?
асинк/авайт это киллер вещь для работы с корутинщиной и асинхронщиной. настолько крутая, что ее вводят везде где можно - питон, жс, даже руби
писать в старом стиле это как делать операцию топором - можно коненчно, но топорно
и тут его "осторожнее" как раз и нужно.
>В java хорошая многопоточность в отличии от шарпов
дооааа доааа ))
>Почему в на CS50 Harvard, java изучается как нормальный язык
ох ох. да в разных учебных заведениях даже паскаль изучают. это ни о чем не говорит.
>но программируя на python, go, java чувствуешь себя программистом, а не девелопером.
ась?
на питоне кстати реально кульно в плане "думаешь о задаче. а не о том как". Потом идет шарп. потом жава, потом го
ладно бы он про котлин, но он про жаву
Вообще дикий комент там
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент.
Верно. Он не нужен упоротым, поросшим мхом, жавистам, любящим писать длиннннно и много.
>Во вторых java опенсорс, линуха
Ну тут как бы можно и не читать дальше ибо и так все понятно
> В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM.
А тут в прошлых тредах жаловались именно на необходимость тюнинга JVM.
про type erasure будем вспоминать? нет, ну и ладно
>и не заморачиваться над более узкими оптимизациями
структуры были изначально. Далее Span/ref, дотнет 7 вообще вышел под лозунгом "не нужны нам новые фичи, даешь оптимизацию"
>и безопастностью которая у шарпов слабее
хз о чем это он. особенно после нашумевшей истории с log4net
>Видим nхибернейт стартовал на java, стиздили на шарпы.
ммм и чо? для жавистом же - им же проще переходить. А так кто юзает хибернейт? стандарт это EF
>elasticsearch - java, Jira - java, Jenkins - java, Kafka - java
а гитлаб внезапно руби. И чет НИКТО не переписывает на жаву, на такую замечательную жаву.
>То что крупные компании используют java тк раньше не было выбора - смешно.
мда. ой дурак.
>async await? Может стоит осторожнее с многопоточным работать?
асинк/авайт это киллер вещь для работы с корутинщиной и асинхронщиной. настолько крутая, что ее вводят везде где можно - питон, жс, даже руби
писать в старом стиле это как делать операцию топором - можно коненчно, но топорно
и тут его "осторожнее" как раз и нужно.
>В java хорошая многопоточность в отличии от шарпов
дооааа доааа ))
>Почему в на CS50 Harvard, java изучается как нормальный язык
ох ох. да в разных учебных заведениях даже паскаль изучают. это ни о чем не говорит.
>но программируя на python, go, java чувствуешь себя программистом, а не девелопером.
ась?
на питоне кстати реально кульно в плане "думаешь о задаче. а не о том как". Потом идет шарп. потом жава, потом го
ладно бы он про котлин, но он про жаву
>для других языков дохуища курсов/книг/сайтов для изучения
Каких? Русскоязычный материал — всякая основа, уровня информации из метанита или "курсы для прокрастинаторов". Специализированные вещи никто никогда не переводит.
На C# количественно туторов меньше просто потому, что всяких хуесосов-разводил меньше, но тематически все на том же уровне.
Не знаю в какой ты реальности живешь, но в моей реальности найти годную информацию по питону и джаваскрипту гораздо сложнее — без вот этой хуни, где на середине статьи тебе начинают впаривать масло для бороды.
Очень шикарно развёрнутый ответ,вы круты
>"думаешь о задаче. а не о том как"
В любом языке можно так делать, просто потом получается говнокод. И в одних языках это осуждается (поэтому приходится "думать как"), а в других это норма.
то просто ты ленивый
да одного хабра хватает чтобы знать разные этакие штуки глубоко
в мсдн неплохо описана работа с их продуктами - тот же EF внезапно хорошо описан
Книги никогда не читал.
Как это вообще можно прочитать?.
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент. Во вторых java опенсорс, линуха и тп, а это власть и кастом перед любым заказчиком, не говоря уже про разные APS, JVM, JDK, GC. И как сказали что заказчику нужно быстрее и хорошо - тогда java так же очень хорошо подходит(подключаем бут и не паримся, все работает из коробки). В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM. Мелкомягкие просто тупо продают язык как продукт и не заморачиваться над более узкими оптимизациями и безопастностью которая у шарпов слабее. Винда сущее говно на которое подсадили СНГ в 2000х. Мы в компании используем linux и поем, мак тут дело вкуса, по мне, лучше взять нормальный ноут и пихнуть туда linux. В четверых, открываем вакансии по шарпам. Видим Например касандру, она на java. Видим nхибернейт стартовал на java, стиздили на шарпы. Далее, elasticsearch - java, Jira - java, Jenkins - java, Kafka - java. То что крупные компании используют java тк раньше не было выбора - смешно. Почему они тогда до сих пор пишут новые сервисы и опенсорc на java? Да java по синтаксису проигрывает, шарпы надувают из года в год, а java забросили на 10 лет. Но даже при таком раскладе, можно писать все что угодно(практически) и не париться. Если вам нужно куча сахара, то шарпы. Зато когда будете работать над крупными проектами в USA, ОАЭ ,China, то слезы не показывайте. async await? Может стоит осторожнее с многопоточным работать? В java хорошая многопоточность в отличии от шарпов. Деплой на azure? Серьезно? 90% девопсов писают кипятком от AWS или на худой GCP, мб стоит выбросить все сертификаты. Почему в на CS50 Harvard, java изучается как нормальный язык, а шарпы мелькают только на курсе Game Development. Почему в Stanford CS java это самый большой курс из всех, а шарпы изучаются в кратком обзоре современных языков. Язык это инструмент, но программируя на python, go, java чувствуешь себя программистом, а не девелопером. Я понимаю что некоторым хочется верить что они давно сделали правильный выбор, и оба спикера сделали правильный выбор. Каждому инженеру важно иметь хороший инструмент. Заказчику хочется быстрее, дешевле, и что бы все могли. Оба языка отлично справляются. Но мало заказчиков знают сколько ночей потребовалось что бы внедрить хорошие решения используя тот или иной язык.
Как это вообще можно прочитать?.
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент. Во вторых java опенсорс, линуха и тп, а это власть и кастом перед любым заказчиком, не говоря уже про разные APS, JVM, JDK, GC. И как сказали что заказчику нужно быстрее и хорошо - тогда java так же очень хорошо подходит(подключаем бут и не паримся, все работает из коробки). В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM. Мелкомягкие просто тупо продают язык как продукт и не заморачиваться над более узкими оптимизациями и безопастностью которая у шарпов слабее. Винда сущее говно на которое подсадили СНГ в 2000х. Мы в компании используем linux и поем, мак тут дело вкуса, по мне, лучше взять нормальный ноут и пихнуть туда linux. В четверых, открываем вакансии по шарпам. Видим Например касандру, она на java. Видим nхибернейт стартовал на java, стиздили на шарпы. Далее, elasticsearch - java, Jira - java, Jenkins - java, Kafka - java. То что крупные компании используют java тк раньше не было выбора - смешно. Почему они тогда до сих пор пишут новые сервисы и опенсорc на java? Да java по синтаксису проигрывает, шарпы надувают из года в год, а java забросили на 10 лет. Но даже при таком раскладе, можно писать все что угодно(практически) и не париться. Если вам нужно куча сахара, то шарпы. Зато когда будете работать над крупными проектами в USA, ОАЭ ,China, то слезы не показывайте. async await? Может стоит осторожнее с многопоточным работать? В java хорошая многопоточность в отличии от шарпов. Деплой на azure? Серьезно? 90% девопсов писают кипятком от AWS или на худой GCP, мб стоит выбросить все сертификаты. Почему в на CS50 Harvard, java изучается как нормальный язык, а шарпы мелькают только на курсе Game Development. Почему в Stanford CS java это самый большой курс из всех, а шарпы изучаются в кратком обзоре современных языков. Язык это инструмент, но программируя на python, go, java чувствуешь себя программистом, а не девелопером. Я понимаю что некоторым хочется верить что они давно сделали правильный выбор, и оба спикера сделали правильный выбор. Каждому инженеру важно иметь хороший инструмент. Заказчику хочется быстрее, дешевле, и что бы все могли. Оба языка отлично справляются. Но мало заказчиков знают сколько ночей потребовалось что бы внедрить хорошие решения используя тот или иной язык.
Чел, который представлял джаву, не сказал, что в джаве есть полная обратная совместимость и код 1995 года работает и сейчас. А в сишарпе каждый год всё ломают. Даже в этом треде все сидят и ждут новых книг по дотнету 7, потому что на старом дотнете уже ничего не запускается.
Что имеешь в виду под "полной обратной совместимостью"?..
Кстати, "полная обратная совместимость" спринга - отдельный вид изощрённого удовольствия.
>Компилируется и работает.
А C#-код, написанный на первой версии языка, у тебя не компилируется и не работает что ли? Чего пиздишь?
Или недоволен, что на .net6 не можешь создать приложение Виндоус Формс?
> А C#-код, написанный на первой версии языка, у тебя не компилируется и не работает что ли? Чего пиздишь?
Не все стандартные либы нет фреймворк перенесены на неткор.
А ты в курсе вообще, что в 8 версии они ввели null-значимые типы и теперь все ссылочным типам надо приписывать ?, чтобы присвоить null.
В 10 версии они изменили Main и он теперь как отдельный файл без класса и функции.
Про переделки фреймворков я вообще молчу. Там вообще ничего не осталось от первой версии.
>Не все стандартные либы нет фреймворк перенесены на неткор.
Стандартные либы - какие? Сравним с "стандартными либами" в джаве...
>А ты в курсе вообще, что в 8 версии они ввели null-значимые типы и теперь все ссылочным типам надо приписывать ?, чтобы присвоить null.
>В 10 версии они изменили Main и он теперь как отдельный файл без класса и функции.
Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией?
>Про переделки фреймворков я вообще молчу. Там вообще ничего не осталось от первой версии.
А ты не молчи. Сравним с джавой...
В джаве даже стандартные либы сохраняют обратную совместимость. Есть даже неудачные решения, которые не удаляют, чтобы старый код работал.
>Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией?
Давай!
Я пробовал писать код из книжки Фримана по дотнет кор 2.0 и ничего не работало. Сидел как дурак и гуглил каждый кусок кода, а там писали, что в дотнет 6 всё по-другому. Даже не просто заменить А на Б, а совершенно иной подход. Надо целые модули переписывать.
Ну вот можно конкретный пример "стандартной либы"?
>>19471
То же самое, нужен конкретный пример. А то я тоже из гайда спринга (прям текущего на сайте с оф докой) пишу хеллоу ворлд, и он не работает. Т.к. они опять что-то поменяли. Но я-то понимаю, что спринг - это нихуя не "стандартная библиотека".
>java.util.*
Я про .net, к нему ж претензии. Могу также ответить - System.Collections
>В Спринге хеллоу ворлд не менялся.
В windows forms тоже.
>я ему говорю про то, что для других языков дохуища курсов/книг/сайтов для изучения
Для шарпа есть МСДН, который покрывает где-то 85...90% информации которую нужно знать.
мсдн-ом он называет оф доку от мелкософт
то что ее перенесли на новый адрес сути не меняет.
в народе она по прежнему зовется "мсдн" и все понимают о чем речь.
>>Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией?
>Давай!
При создании солюшена ставишь галку "Do not use ttop level statements" и у тебя будет нормальная структура с Main'ом
Затем в свойствах проекта устанавливаешь
ImplicitUsings и Nullable в disable
И у тебя будут нормальные юзинги и отсутствие дроча с nullable
Хз, я начинал вкатываться в шарп еще в 2015, уже никто так не называл. Я чисто по аббревиатуре догадался что он имеет ввиду.
Я хуй знает, но и сейчас любой поисковик по тегу "мсдн" тебя на сайт с доками майкрософта по дефолту выкинет. Так что похуй как он там сейчас называется, суть одна и та же, только пользоваться удобнее стало.
Ну все, пристыдил, как жить то теперь, блядь.
>программируя на python, go, java чувствуешь себя программистом, а не девелопером
Проиграл с этого ментального самоподдува
мимо go-господин, в прошлом писал на жабе
А программируя на c++ чувствуешь себя Computer Engineer, а не каким-то программистом или девелопером.
>>В java хорошая многопоточность в отличии от шарпов
>дооааа доааа ))
Там видимо подразумевались фишки виртуальных тредов.
>>19327
>А так кто юзает хибернейт?
Хибернейт в принципе тема довольно сомнительная нынче. Во многих современных проектах на жабе от него стараются отказываться в пользу нативных запросов и JOOQ.
>>19327
>асинк/авайт это киллер вещь для работы с корутинщиной и асинхронщиной
Обсуждаемо. Делить мир на синхронные и асинхронные функции тоже не есть хорошо. Из всех языков конкарренси для среднего обывателя лучше всего реализован в Go.
>а как говорят неофиты?
А никак они требуют книжек на русском и плачутся об отсутствии материалов по шарпу.
которую через год переписывать потому что неофиты бестолковые и "у нас не компилируется, мы не понимаем, а в гугле забанили".
>>19312
А какая разница какой язык круче? Я в свое время писал и на С++, и на шарпе, и на джаве, и на питухоне. В итоге сейчас на проектах с говнолангом сижу.
В первую очередь выбирайте проекты, чтобы там были выстроены адекватные процессы и разрабы были нормальными, а не пассажирами с заводов, вкатившиеся по айти курсам. Язык и тулинг это уже сугубо вторично.
Вдруг придётся вручную прикручивать к проекту Tomcat или выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили?
Вдруг у тебя сломается комп и надо будет писать на слабом ноуте, на котором 10-ку не поставить и вижлу не запустить?
Вдруг надо будет написать веб-приложение, а идея у тебя бесплатная и нельзя создать проект на спринге?
Вдруг придётся писать под отечественный линупс, а там дотнет не ставится?
Мне нужен учебник, а не справочник
Очевидно, решил, что шарп всё. Через пару лет и по жабе писать перестанет.
Это реальные проблемы, с которыми можешь столкнуться, если не правильно выбрал язык.
>Ну а как бы ты поступил, если у тебя не компилировалось бы?
Раньше в книгах по программированию так и писали: "Чел, извини у нас тут дохуя ошибок в листингах программ, но ты разберешься - мы в тебя верим"
с дженериком вместо "????" работает, но я к сожалению не могу использовать дженерик
>>19692
>Вдруг придётся вручную прикручивать к проекту Tomcat
Берешь и прикручиваешь, это делается просто, достаточно парочку гайдов от индусов прочесть.
>>19692
>выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили?
Значит берешь и начинаешь понимать, что там они перелопатили.
>>19692
>Вдруг у тебя сломается комп
Тогда я прошу компанию выдать мне новый.
>>19692
>на котором 10-ку не поставить и вижлу не запустить
Ставлю легковесный дистр линукса + vs code.
>>19692
>а идея у тебя бесплатная и нельзя создать проект на спринге
Прошу компанию выдать мне идею ультимейт.
>>19692
>Вдруг придётся писать под отечественный линупс
Попросту не работай в подобных конторах.
Видишь, какие простые решения у всех проблем?
>Вдруг придётся вручную прикручивать к проекту Tomcat или выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили?
А может ты просто даун который не способен осилить несколько страниц текста с описанием изменений.
>Вдруг у тебя сломается комп и надо будет писать на слабом ноуте, на котором 10-ку не поставить и вижлу не запустить?
Во первых. Ноутов на которых невозможно десятку и студию запустить ты сейчас не найдешь уже в рабочем состоянии, так что не надо пиздеть.
Во вторых. Сейчас даже под андроид IDE есть, с автоподстановкой, нюгетами и даже компиляцией на теле. Так что даже в жопе мира можно кодить (как-то так и делал зависнув на неделю без компа в ебенях)
>Вдруг надо будет написать веб-приложение, а идея у тебя бесплатная и нельзя создать проект на спринге?
Чиво бля?
>Вдруг придётся писать под отечественный линупс, а там дотнет не ставится?
Ты из какой дыры выполз? Ты сейчас заебешься придумывать линукс на котором нет .net'а.
У меня рабочий ноут, на который нельзя поставить 10-ку. Зато там работает линупс легковесный.
Все так. Хотя если хочется игрульники на юнити делать, то шарп норм выбор.
А мне кажется, что ты сам не разбираешься в теме и резок на суждения.
Старых ноутов дофига и они работают. Это новые ломаются через год, потому что их делают фигово. А старые ещё 50 лет прослужат, а может и больше.
Отечественные линупсы не поддерживают дотнет, но зато из коробки есть джава 8 либерика и опенждк. Для примера можешь любой взять, хоть Астру, хоть РедОС.
>Вдруг надо будет написать веб-приложение, а идея у тебя бесплатная и нельзя создать проект на спринге?
Это ты написал же? После этого ни к чему, что ты пишешь, уже серьезно относиться не получается...
Ну иди создай в бесплатной идее. Они забанили все плагины, через которые можно было это делать раньше.
Эклипс крутой. Спору нет. Есть даже сборки под Спринг бут. Но сам редактор морально устарел
Нетбинс вообще не рабочий из коробки. Замаешься его настраивать. VS Code прикольный, но плагин на Спринг не удобный, там тебе выдают последовательно поля ввода, которые надо безошибочно заполнить.
>>19771
Да я знаю, что ты скажешь. Типа есть веб-форма, где можно заполнить поля и скачать архив с заготовкой проекта. Но это очень не удобно и требует подключение к интернету. А если интернет отключили, а срочно надо что-то сделать!?
>А если интернет отключили, а срочно надо что-то сделать!?
Ты решил окончательно себя потопить что-ли? ) Все мы были вкатунами, все чего-то не знали и были наивными. Ничего страшного.
Читаю списки альтернатив хероку и чтот там нету поддержки С# райнтаймов. Куда энтузиасту загружать приложухи для портфолио?
Локалхост.
Тогда ищи где рантайм есть (бтв сделай виртуалку под линупсом на гиг рама и тебе хватит запаковать в докер твое говно)
новый инстанс создается каждый раз когда к нему обращаются? может ли их быть несколько одновременно?
Атрибуты не имеют, и не могут иметь никаких "новых инстансов", и вообще инстансов, не инстанциируются, и не слова "атрибут" и "инстанс" не могут быть использованы рядом.
Думаю, это ответ на твой вопрос.
я не пони
это статические классы получается?
допустим вот я сделал атрибут пикрелейтед и повесил на несколько проперти
а потом на пике 2 их еще в коллекцию положу
куда это все ссылается?
Это другое.
Сорян, засыпаю. Но в целом инстансы создаёт clr в условной куче, а атрибуты существовуют как метаданных в il
теперь я еще больше запутался.
я хочу так вот сделать в теории: атрибут будет самостоятельно описывать свой проперти: сделает делегаты на геттер-сеттер, имя для INotify, имя для GUI, какие-то ограничения для элементов GUI и т.д. короче говоря хочу что-то вроде карточки над проперти которая по большей части будет автоматически будет заполняться, а что не будет то прямо над проперти в коде будет висеть - удобно же
а затем я хочу вытянуть все эти атрибуты с класса в рантайме и уже через них цепляться.
имеет ли смысл морочиться?
Ну допусутим я реализую интерфейс IDisposable, а что там писать? Пустым оставлять? Лично в моем коде нет ничего, что нужно освобождать.
>имеет ли смысл морочиться?
Имеет, если ты собираешься динамически подцеплять внешние плагины с чужим кодом. Если весь код твои и никакой поддержки расширений не ожидается, то проще эти самые карточки сделать обычными классами без привлечения рефлексии на атрибутах.
>>19995
>А правда, что когда юзаешь модальное окно (ShowDialog), нужно обязательно диспозить его?
Ты про ВинФормы?
ShowDialog это метод формы, ты по сути спрашиваешь надо ли диспозить форму. Ответ очевиден - если у тебя в форме есть неуправляемые ресурсы надо писать свой диспоз и его вызывать, а если форма чисто манагед, то на диспоз можно забить и подождать пока сборщик мусора сам раздуплится.
Cекция using(var shit = new SomeShit()) нужна чтобы формошлепы не забыли гарантировано освободить ресы и занулится.
>Ну допусутим я реализую интерфейс IDisposable, а что там писать?
Его надо писать только если у тебя в классе есть неуправляемые ресурсы, во всех остальных случаях - нет.
> Его надо писать только если у тебя в классе есть неуправляемые ресурсы, во всех остальных случаях - нет.
Ну вот например в контроллере есть контекст бд, но в шаблоне по умолчанию idispose не реализуется. Почему так?
Потому что каждый запрос это createScope у контейнера
И в конце каждого запроса scope диспознет все что родил и что имеет lifetime scoped
Программируют мышкой винформы и WTF. И пишут сайтики для госконтор на древнем проприетарном дотнет фреймворке.
Ставлю на сектор "говнокод".
В конце ты делаешь ToList() и ВНИМАНИЕ у листа есть родной метод реверса. Если тебе нужен иногда обратный порядок группировки можно просто вызвать этот метод конечному результату после линкодрисни.
А еще у тебя сраная стрелочка вместо нормальныйх скобок. Выкинь эту каку из своей жизни.
Говнокод из-за повторов
Всегда есть смысл ждать новых
А когда они выйдут лучше все же новее подождать
Ведь они точно лучше
А до тех пор работать на заводе
На синклер бейсике никто не пишет серьёзных программ, а пишут сразу на ассемблере Z80A. Это раньше было сложно достать инфу, а сейчас благодаря интернету можно найти всю инфу по архитектуре Спектрумов.
Зачем писать.
Главное - учить то что не устареет пока учишь
Ведь людям сложно выучить по любой инфе а потом прочитать несколько статей из раздела "что нового"
Дак ладно там бы добавляли новое из разряда: новая функция в библиотеке или новая закорючка в языке. Дак они переделывают полностью язык. Сишарп 1.0 и Сишарп 11 - это два разных языка, как джава и котлин наверно. Я уж молчу про фреймворки, там вообще всё новое в каждой версии. Если взять даже старые книги по ним, то авторы это неоднократно отмечают, что пришлось переписать большую часть книги.
И что с того
Весь мир так учил
Или ты думаешь что на каждую новую версию снова книгу читать
Просто читается "что нового" и миграция
И немного статей по новым фичам если оно не простое
Меня ещё смущает, что надо консольной командой генерировать миграции. Не могу смириться с этим фактом.
я не про те миграции
а про миграции с одной версии либы/фреймворка на другую
где очередной гений из мелких решил переделать Startup класс
>На синклер бейсике никто не пишет серьёзных программ
Воу-воу, палехче. Пишут. И игры даже норм делают. Правда все больше на компилируемом варианте, но пишут.
>Сишарп 1.0 и Сишарп 11 - это два разных языка, как джава и котлин наверно.
Угу. И у большинства джавистов одна и та же проблема, всем хотелось бы работать на няшном котлине, но приходится работать на 8-й версии джавы (которая почти 10 лет назад вышла).
В то же время на шарпе сейчас найти проекты на версиях ниже 7-й (а сейчас уже наверное ниже 8-й) - постараться нужно.
Да это чисто вкатунская боль, он из книги 2006го года перепечатал в студию, а оно не компилируется, т.к. класса Bitmap нет в .NET6, и начинаются рякания.
Для норм разработки всё это не имеет никакого значения (другое - да, но не это).
>приходится работать на 8-й версии джавы (которая почти 10 лет назад вышла)
А в чем проблема, собственно? Да, некоторых удобных фишек в 8 джаве нет, но все основное, включая лямбды и стримы, вполне себе присутствуют. Все последующие версии по факту минорные, может только 21 LTS версия будет популярной, так как туда лум уже могут завезти
Нечитаемая параша
>приходится работать на 8-й версии джавы
Я бы с удовольствием пошёл работать на 5 версию джавы. Хоть многолетние сеньоры кичатся знаниями, но тогда было легче всё осваивать, чем сейчас. Без лямбд и прочих стримов собес не пройти, а это как бы функциональное программирование, которое требует иного мышления, а не просто ещё одна библиотека.
Вот sql-запросы (реляционная алгебра) требуют иного мышления, а лямбды это так... хотя тоже отчасти верно.
И веб тоже. Декларативный недосинтаксис хтмл с полной зависимостью от браузера давно по факту вытеснил убеищных JS. Т.е. весь веб исполняемый, а не декаративный как задумывалось изначально. Можно все заменить объектами на любом языке и гонять их по сети на клиент. Мелкомягкие пытались родить что-то похожее в виде сильверлайта, но как обычно не довели до конца и обосрались. Их поражение - наше пролжающеся говноедство ублюдочной функциональной парадигмы JS торчащей из каждого умного утюга.
Да ну. То есть теперь можно сесть и разработать не сервелат, который проприетарный модуль и браузеры ему противились (как и вообще доп плагинам), а сделать можно на wasm и будет счастье?
Но стоп, вот же сделали blazor, а чет не видно массового бега с жс
Дак он наверно на больших ЭВМ компилируется, а на Спектрум заливается образ в машинных кодах. Насколько помню такие компиляторы и раньше были, но ими никто не пользовался, потому что они съедали половину ОЗУ и на программу ничего не оставалось.
Да. И в этих аплетах можно было реализовать приложение без браузерной прослойки хтмл-цсс-жс, плюс нормальное апи для бека. Неудобство только в том, что пользователям надо ставить фреймворк и аддон на браузер, зато с точки зрения разработки каеф - пишешь почти нормальный десктоп, за исключением данных прилетающих по сети.
Алсо, я как-то давно забредал на сайт посвященный алгоритмам поиска путей, определения видимости, разбиения полигонов и прочими такими задачками для игор/графики. На нем все примеры были сделны в аплетах на жаве. Можно было алгоритм из статьи сразу пощупать в живую - поменять данные, мышкой подергать обстаклы и все такое. Был удивлен как все удобно и без тормозов, просто космические технологии древних.
>blazor
Он же вроде компилируется в жс на фронте? Это другое.
Идея в том чтобы вообще выкинуть каличный браузерный стек оставив одну запускалку объектов полученых из сети, а дальше они пусть сами ебутся с логикой и отрисовкой всего что нужно.
строку запроса парсит сам движок и биндит тебе на параметры, только называй их правильно и аттрибуты вешай если нужно
а сущность нужно если ты хочешь распарсить post или гет запрос сразу в объект вместо параметров к action
>Если весь код твои и никакой поддержки расширений не ожидается
ага, весь код мой. я хочу свои собственные классы динамически подцеплять.
я хочу. биндингов там где я макакирую юнити нет, поэтому мне приходится велосипедить, суть такова:
есть мои сущности, к проперти которых я хочу подцеплять свой UI, двухсторонним манером 1 проперти к коллекции UI элементов.
сущности я потом планирую дополнять, возможно менять по мере разработки и хотел бы сделать биндинг этот максимально приятным и открытым для себя же в будущем чтобы потом таскать его в другие проекты.
я хочу сделать что-то вроде репозитория где ключом будет тип, а данными - класс-коллекция открытых делегатов на все геттеры/сеттеры декорированных атрибутом проперти и вытянутые из атрибута данные(имя для UI, ограничения т.д.)
если попадается класс, которому нужно рисовать UI, то сначала смотрится репозиторий, если там ничего, то создается с рефлексией и фильтром по декорированным проперти и отдается.
а если и там нет и атрибутов нет, то орать на весь поезд и требовать остановки потому что классы без атрибута не имеют права в этот обработчик вообще попадать и я где-то проебся.
в итоге по идее должна получиться система, где хардкодиться будет только имя проперти для UI и прочие вещи которые я хочу в конструктор атрибута передавать, но т.к. это будет висеть прямо над проперти, то там все сразу будет наглядно видно
а всю дичь с рефлексией можно и под капот и она будет крутиться только один раз для каждого декорированного типа, а потом просто раздавать кешированные данные классу отвечающему за создание UI
единственное что я пока не допер как делать каким образом правильно запилить открытый делегат
буду благодарен если мне укажут где я дурак и как сделать правильнее
Проблема в том, что я могу забиндить параметры только к строкам, так как например min и max у меня могут быть разных типов, в зависимости от выбранного свойства для фильтрации. В итоге мне приходится писать большую портянку из switch case. Я и спрашиваю, уместно ли эту портянку оставлять в обработчике, или лучше вынести в отдельный класс.
Хотя я только что подумал, что можно просто создать отдельные параметры для каждого типа и не ебаться со свитчами и tryparse
получением запроса занимается контроллер
и значит его дело разобраться "что там пришло и что с ним делать"
тебе же либо вот так разбираться самому
либо убрать совпадение имен
либо написать свой биндинг
>единственное что я пока не допер как делать каким образом правильно запилить открытый делегат
Вот это непонятно. Что за открытый делегат? Ты хочешь атрибут который указывает метод-обработчик события?
это я у джона скита увидел и сразу понял что ХОТЕТ
https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/
https://github.com/jskeet/protobuf-csharp-port/blob/master/src/ProtocolBuffers/FieldAccess/ReflectionUtil.cs
там в общем один и тот же делегат дергает метод любого инстанса если ему нужный инстанс передать
У меня не в раме проблема, а в жд, у меня памяти нет от слова совсем. 10 гигов на такую хуету это жырно ппц, придется искать
Понятно. Смотри там передоз от магии не схвати.
какой еще открытый делегат. геттеры сеттеры тебе делегаты не помогут. Ты просто не сможешь скастить к Func<T> ведь у тебя нет этого самого T
Ты достаешь PropertyInfo и далее генеришь геттеры/сеттеры через expressions или emit и складываешь в словарик и используешь. Конечно ты не сможешь избежать боксинга ведь в этот словарик нужно положить геттер сигнатурно одинаковый, а значит Func<T, object>
Другое дело если ты используешь методы маппинга сразу чтобы не было лишнего object (но это не твой случай, ты же не маппер пишешь)
Это не питон и не руби. Тут опреление сигнатур порядка не имеет, лишь бы оно где то было чтобы компилятор смог найти
Последовательно выполняются инструкции внутри функции. А все определения классов, перечислений и тд, заносятся в метаданные во время компиляции.
Храню отдельныии классами в папочке моделс.
В этом и неоднозначность 😂😂😂
Перестать выебываться, не?
очевидно же дропнуть первый метод и нормально переписать второй
а еще бросить шарп и уйти работать в пятерочку, а то там вечно на кассе не хватает людей.
А 3.5 доллара за впску амазона - никак не осилишь? Там же и впн развернуть можно заодно.
Где же он доллары возьмет ))
Для дтошек использую Requests/Responses
И опять же к каждой дто добавляю постфикс Request/Response чтобы быстро понять что это.
Когда их много можно группировать по фичам/версиям апи(иногда все вместе).
Вообще иногда есть смысл для контрактов завести отдельный проект, где у тебя сообщения для шины и запросы/ответы шарятся между проектами.
>Xaml не поддерживает кириллицу даже в свойствах Text
Вы ебанутые?
Братиш, .net Framework 3.5 - 4.6 наше все. Остальные индусоаподелия под этой торговой маркой идут нахуй.
>куда отправляющий
разве важно куда? там get запрос на получение данных из одной системы (типа 1с предприятие) и post запрос во внутреннюю систему компании. Иными словами, тупо перекидывание данных. нужно сделать так, чтобы это происходило каждые 15 минут.
>причем тут вообще IIS
приложение должно быть на asp.net, такие приложение разворачиваются в IIS
Конечно важно
Потому что суть веб-сервиса ПРИНИМАТЬ запросы
Иначе это просто сервис который тупо цикл с периожом в нужное время
>ты о чем вообще?
О том, что в NetFramework WPF-проекте я вообще не парился, если в xaml-разметке присутствовала кириллица. Я даже порой иконки тащил прямо из символа юникода, если надо какую стрелку вставить.
Щас сделал проект на NET6 и компилятор ругается, что присутствуют недопустимые знаки. Даже если это Text="ываывыва" в TextBlock, даже если это комментарий (тебя ебет, компилятор?). Специфическая универсальность по версии майкрософта, это не когда ты "можешь и там и здесь", а когда ты "не можешь ни здесь, ни там".
Щас почитал SO, все предлагают вставлять коды символов. Вы, блять, больные?
22й год на дворе, вернулись в каменный век. Я себе типа жизнь облегчить хотел, а не решать новые пробелмы.
хз о чем ты.
у самого такой проект еще со времен 2 нета доросший до 4.8
спокойно переехал на 6 когда он вышел
и вот недавно на 7
никаких проблем с кириллицей. А он такой весь.
Но в новых проектах предпочитаю строки из ресурсов.
Да я вроде тоже как-то переводил проект и вроде ошибок не было, а щас создал новый и какая-то херь.
Ну так и делай что задумал. Ну а что еще делать то
делай asp.net проект, пусть принимает запросы. IIS ему особо не нужен, но если хочется, то...да твое дело.
И в нем сервис IHostedService/BackgroundService где
while(!ct.IsCancellationRequested){
делаем работу
await Task.Delay(Timeout.FromMinutes(15))
}
Ну а при внешних запросах меняй в нем что хочешь - это ж singleton (только придется правильно в DI регать)
Я вот щас в ресурсах кириллицу оставил и норм, но как только оставляю ее в Window — ошибка.
>Нужно создать веб-сервис, который будет разворачиваться в IIS
ASp.Net, только ему необязательно в IIS разворачиваться.
>отправляющий запросы в определённый интервал времени. Что почитать по этой теме?
Quartz.net
Короче это был какой-то глюк студии. Щас создал новое окно и все хорошо. Я не знаю что это и почему.
можно ли сделать так, чтобы если в классе определен один интерфейс компилятор ОБЯЗЫВАЛ меня определять второй там же?
С чего ему тебе приказывать
Это ты можешь запилить агализатор
или проверить на старте в рантайме для дебаг версии.
А, вот ты о чем. Я сперва подумал, что рядом с запросом failed было, а плагин его скрыл, заменив цветом.
320x240, 2:01
Нет, ты уж прям хочешь какого-то совсем необычного поведения на уровне вангования. Это же ведь суть интерфейсов — быть смиксованными и уже потом реализоваться. Это же буквально шаблон из трех слов. Уходит традиция, тонкая традиция, когда ты берешь спокойно IКартофель, IМорковь берешь, IБаклажаны берешь, или еще берешь, например, это ... и IМорковки берется например, берется и забираются IДети и IСтарыеЛюди, собираются где-то на Кухне.cs, или если угодно вам ... или если угодно вам в КухонномПритворе.csproj, собираются интерфейсы и спокойно делается руками всё. От этого миксера пошла и микс-культура. Микс-культура нарезается в подпольных фабриках...
Проорал люто с КухонногоПритвора.csproj
TermStorageRegister уже есть в БД (кодфёрст еф6 все дела).
Теперь хочу добавить в БД TermBaseRegister, но при миграции ЕФ норовит просто переименовать TermStorageRegister в TermBaseRegister. А мне надо чтоб это две разные таблички были
Подскажите плиз как ЕФ заставить создать вторую табличку, а не переименовывать старую
имеет ли смысл?
Говно.
Шину событий лучше напиши и прокиджывай ее как сервис везде где нужно непрямое взаимодействие объектов.
как хочешь.
тут все фломастеры
некоторые любят шину за косвенность
другие хейтят шину за косвенность
кто то делает синглтон
кто то таскает с зависимостями
кто то просто строки как имена событий и отдельно объект данных
кто то юзает целые объекты как события
кто то делает получателем метод подходящей сигнатуры
а кто то делает интерфейсы типа IReceiver
А еще кто то просто шлет сообщения ака события типа "всех уведомляем"
другие же делают Domain Events - тут уже и события ДО самого события даже можно послать.
А то и вообще пытаются сшивать части чтобы они друг о друге не знали, а чисто кидались С ОТВЕТАМИ друг в друга, возможно даже инстанцируясь при этом (mediatr)
ты знал куда шел (с)
Я нашел, что по дефолту в ЕФе TPH, а я хочу TPC - https://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx и https://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx
Только вот я столкнулся с проблемой такой вот - https://stackoverflow.com/questions/31315158/tpc-inheritance-error?noredirect=1&lq=1
Т.е. меня в базовом классе есть ссылки на другие классы
а ля
TermBaseRegister
{
...
public User Agent {get; set;}
...
}
И при попытке миграции я получаю ошибку
The association 'TermBaseRegister_Agent' between entity types 'TermBaseRegister' and 'User' is invalid. In a TPC hierarchy independent associations are only allowed on the most derived types.
Т.е. вот эти ссылки должны быть у наследников только (Я так понимаю в TPC базовый класс чуть ли не абстрактным хотят видеть)
Можно конечно в TPT попробовать, но это же кал говна ебаный, от которого только головняк при сборе данных будет кмк
>а как ее сделать?
Например как на пике.
Шина событий - это просто класс который споставляет TEvent => список обработчиков.
Любой объект может подписаться на нужное ему событие:
Bus.Subscribe<MouseClick>(this.MouseClickHandler);
Любой объект может отправить событие в шину:
Bus.Send<MouseClick>(new MouseClick(X, Y));
Все кто на него подписан, получают объект класса события и что-то с ним делают.
>и как сервис прокидывать
Просто в конструкторе передаешь инстанцию шины. Или еще проще - делаешь шину синглетоном, но это не тру.
Небольшое замечание: на пикче использованы слабые события, чтобы не было нужды явно отписываться от шины, когда класс получатель становится не нужен. Если использовать обычные делегаты, то нужно отписывааться явно, чтобы не получить утечку память. Слабые события создают меньше головняка с правильным удалением объектов, но внутри у них уличная магия.
>когда класс получатель становится не нужен
Вот только отписка так будет только когда GC придет
А до этого так и будет получать уведомления и реагировать, хотя уже не нужно
>Слабые события создают меньше головняка с правильным удалением объектов
самый лучший подход это сильная (ну то есть не слабая) подписка с lifetime-ом
>Вот только отписка так будет только когда GC придет
Ноуп. В моей реализации дохлый класс отпишется когда произойдет любое событие на которое он потписан.
Порядок действий примерно такой:
1. На объект теряются все ссылки.
2. Отрабтавает GC.
3. Становятся невалидными все ссылки в слабых событиях на него.
4. Проходит много-много времени...
5. Происходит событие на которое был подписан уже несуществующий объект - все дохлые ссылки на него чистятся. Вызываются обработчики только у живых объектов.
Оверхед только в том, что некоторое время в шине есть дохлые слабые события. Они могут накапливаться если событие не произойдет никогда, но это очень маловероятный сценарий. я такой ни разу не встречал.
>самый лучший подход это сильная (ну то есть не слабая) подписка с lifetime-ом
Можно и так.
у тебя вера в то, что пункт 2 произойдет быстро. На деле твой объект лежит во втором поколении и неизвестно когда GC почистит второе поколение.
Вспомнил лузный флаг IsDisposed и его проверку в каждом публичноv методе. Не вижу проблем добавить еще один флаг IsDead чтобы запретить прием нежелательных событий после кончины объекта. Один флаг всяк проще чем отписка от 100500 событий в шине.
>пункт 2 произойдет быстро
Алсо у меня такой проблемы не было. Высокоуровневые события происходят оче редко, между ними всегда успевает встрять GC.
>Один флаг всяк проще чем отписка от 100500 событий в шине.
отписка всегда лучше.
Ведь сам компонент может продолжать жить, просто не нужные ему события. А значит без механизма явной отписки никуда.
Нужна агитация за использования лайфтаймов, чтобы народ перестал страдать фигней и сразу делал правильно.
Есть уважаемый аноном современный курс или книга по асп нету, кроме доки? Английский знаю
статью не могу. могу дать годный доклад
https://www.youtube.com/watch?v=Sq_h5bVWJ0k
Про dispose все знают - понятно, но это не более чем информация "меня очищать нужно так то".
Но не более.
когда очищать? как вызвать? очищать ли вложенные IDisposable?
Кто то же должен отвечать за вызов Dispose (мы не говорим конечно про примитивные вещи которым хватит using)
А значит кому то доверяется знание про время жизни.
Те же scope в DI могут диспознуть рожденные ими зависимости если они были добавлены как scoped.
Неплохо работает в асп.нет где есть явнопонятный scope "запрос" или в простом коде где можно выделить scope, но если что то сложное, долгоживущее, многопоточное, то неудобно.
А значит делаем явный лайфтайм - он определяет область жизни компонента и передается в компонент и с ним компонент подписывается, создает дочерние лайфтаймы. В общем то у самого компонента нет метода Dispose - он подписан на лайфтайм
Когда лайфтайм схлопывается, то диспозятся и сам компонент и всё подписки отписываются и вообще происходит очистка всего
В общем то если даже у нас не супер сложный код, то все равно можно использовать эту явность. Просто это непривычно "я не пишу сложные штуки зачем оно мне..."
Удобно же что списки принимают лайфтайм, события принимают лайфтайм - отписка пройдет автоматом и не разделена "подписались в конструкторе и отписались в диспозе который хер знает где внизу портянки и вообще если не забыли отписаться" (с лайфтаймом забыть отписаться невозможно.
обычно для этого пишут финализатор, который GC (если до него дошло, то есть ссылок больше нет) дернет и оно задиспозит забытое
Но это не тру - финализатор вызывается в отдельном потоке, неизвестно когда.
Это костыль (плохой) для решения проблемы "забыть диспознуть"
Ресурсы не обязательно управляются сборщиком мусора или операционной системой. Это может быть, к примеру, временный файл, который надо явным действием удалить, или завершение сессии пользователя на сервере, для чего надо отправить туда запрос. И всё это придётся делать в Dispose.
Если очень просто, то это как
CancellationTokenSource и CancellationToken, где CancellationToken
LifetimeDefintion и Lifetime - выглядят похожие на пару выше как братья. принцип использования и работы идентичен.
У обоих есть и флаг состояния и методы вида с семантикой подписки Register
И можно создавать дочерние
Просто у Lifetime семантика другая - не "отмена", а "компонент умер". Ну и разные плюхи чтобы диспозилось в обратном порядке.
Семантика это важно. Вон мелкие используют CancellationToken как события appllication в асп.нет, что вызывает недоумение - ну да, там есть Register но как бы от CancellationToken ожидается отмена, а для событий есть...ну event
Там есть
"Вообще-то, самая соль там в топовых комментариях (перевод которых стоило бы добавить в начало статьи), где автору справедливо указывают на то, что это не очень ок - предъявлять претензии MS за участия неполноценных фреймворков в бенчах, и тут же сравнивать полноценный фреймворк (full mvc) который занял "лишь 109 строчку", с никем не используемыми реализациями на других языках, о которых никто не знает, которыми никто не пользуется, и которые делались исключительно для бенчмарков.
Хочешь сравнить с php - бери laravel, Yii (374 строчка), а не mixphp. Хочешь сравнивать c Java - тогда где Spring? А, на 351ой.."
Лично я с этим согласен
Ну наебали с результатами значит наебали, чего бухтеть? Жаль конечно нашего techempower-шизика, он с этой таблицей носился по всей борде больше года, а тут такое вскрылось...
Да, можешь сделать кастомный аттрибут, наследованный от ValidationAttribute и надписать метод IsValid как тебе удобно.
Или можно как на пикрил, но надо следить, чтобы у MaxValue всегда было значение.
А что там? Снова мухлюют с бенчмарками? Вот это новость (нет).
К слову о том, когда спрашиваешь линуксятников, а проверил ли каждый из них "исходный код", прежде чем ему доверять, на что те отвечают, что умные люди давно все проверили.
Ага, ага.
К сожалению мы живем во времена пыли в глаза и впечатлительных людей, иначе пройдут мимо.
ну шину легко сделать или взять готовую
а вот выбирать как с ней работать - тут сложно
можешь держать, передавая через конструктор
может статик (те же Domain Events если будешь гуглить то сплошные статики)
а можешь как медиатр - посылатель через конструктор, а вот получатель только реализует интерфейс и сам не подписывается. (но вот лично мне такое не нравится - если подписчик не инстанцирован, значит нечего его будить)
если шину передавать через конструктор то это получается во всех объектах которые создают объекты, которым нужна шина, ее надо держать в референсах т.е. к прочим параметрам при создании надо еще и шину добавлять
если у меня например создание:
MyObject o = new myObject(arg1, arg2, arg3);
то с шиной будет
MyObject o = new myObject(arg1, arg2, arg3, bus);
или можно как-то иначе?
ну да, зависимостей много
но как бы их создает DI
но это как и с логгером. кто то принимает Ilogger<>, другие считают что логинк это вообще "cross cutting concerns" и делают статиком (я статиком)
так что тут выбор из "что меньше бесит и мешает тестированию"
1 статик
2 параметр
3 ambient context, что делают с логгированием, но с мессенджером как то смысла нет, ведь это тот же пункт 1
Можно ведь хотеть разные месседжеры, а можно один статик, но сделать в нем "каналы"(или токен слать с сообщением как доп метка)
В общем кинь монетку
Я как то заморочился и у меня
1 во вьюмоделях мессенджер имеет события с текстовыми именами, вызывает методы и имеет токен. Неудобство - только в рантайме узнаешь, что тип объекта данных не подходит
2 а вот подобие домаиневентс - там классы определяют событие. Целевой класс может иметь несколько хендлеров. Удобно подписывать, неудобно отписывать (обычно и не нужно)
3 я не люблю медиатр с его DI - да ну нечего будить компоненты, да и вообще такая тотальная косвенность приводит к тому что непонятно где что кого. Поэтому у меня подписки явные. Отписки - lifetime отпишет
Спасибо за ответ, воспользуюсь атрибутами. Только тогда возникает еще один вопрос, вот у меня есть класс представляющий таблицу, например book, и класс bookdto, который я использую для получения жсонов, мне получается нужно будет дублировать атрибуты, это не считается плохой практикой?
А вообще, где можно найти пример эталонного web api приложения, чтобы знать к чему стремиться?
Мечтаю вкатиься шарпы, но работа не дает. Два тимлида заставляют сидеть на их технологиях: питухонеры и паскалисты. Это какие-то два микроада. Как хитростью незаметно перевести их на рельсы шарпа?
да прям таки
питончик тоже норм
ну который с типизацией и если не нужна сильная многопоточность.
>и паскалисты
Ебать тебе повезло, аж завидую малость. Хоть нормальный ЯП попробуешь перед тем как твои мозги будут безвозвратно съедены питоном, шарпом или жабаскриптом.
Блин, они еще и сериализацию/десериализацию для него не завезли, ну как так можно.
Нет. Столяров швабодошизик, который боится исполнять чужие покакуньуки на своем калькуляторе. Я свободный от этих предрассудков человек и готов получить и выполнить вирос-шифровальщик хоть по почте.
Паскаль я уважаю, из системных языков он топовый. Самое лучшее отношение граблей к полезному результату. Там где на сишечке будешь охуевать от УБ при выделении памяти и ловить сегфолты работая со строками через указатели, в паскале все делается легко и непринужденно без подводных камней.
Нельзя же. Конпелятор go держит программиста за тупое быдло и постоянно его унижает. Чего стоит хотя бы форс стиля скобок, бесконечные ублюдочные проверки err там где надо и ненадо. Не нужно использовать языки которые умнее тебя в плохом смысле этого слова.
Ладно, тогда на Паскале
Можно ли использовать razor вне asp.net?
Допустим, считываю строки с файла и передаю их и модель/анонимный тип в соответствующий метод, который возвращает строку.
Да.
Короче, каково влияние на производительность слияния словарей ресурсов? Мне не удалось расшарить ресурсы глобально, по крайней мере я пришел к мысли делать в каждом проекте локальный словарь, который мерджит словари из другого проекта.
Но появилась проблема, что пока у меня стиль дойдет до UI-элемента, он проходит через пять объединений словаря. А этот элемент будет помещен внутрь другого, который использует все те же ресурсы. И получается какое-то многократное переиспользование одних и тех же словарей.
У меня вопрос, это студией как-то фильтруется? Как-то она чистит вилкой? Потому что, если все оставить как есть, то это будет пугающе для производительности.
П.И.З.Д.Е.Ц.
Ну я подозревал, что мудоебство синтаксиса xaml не может быть адекватным и под капотом, но чтоб такое ...
Вы понимаете, что ваше байтоебство и попытки отловить миллисекунды, просто уничтожаются одной кнопкой на WPF?
хз о чем он пишет
если он про что то что в словаре - ну конечно создается, а как иначе (ну для решения этого вроде есть x:Shared). А "ссылается на словарь" - непонятно что это
нашел вот такую, статическая шина, не знаю пока буду ли делать обычной, но мне оче понравился т.к. я могу тупо интерфейсы свои унаследовать и они сразу заработают как надо:
https://github.com/velik97/EventBus
я допилил в него свое понимание lifetime(выделил на пиках)
enum из двух записей: once, repeating
внутри листа подписчиков(пик 1) сделал словарь подписчик - enum и метод возвращающий enum подписчика
при подписке по дефолту передаю repeating
в конце каждой инвокации(пик 2) проверяю, если enum once, то удаляю из листа подписчиков отписываю и удаляю kvp из словаря
единственное что на каждый лист подписчиков должен быть свой словарь и наверное надо будет еще и проверять что ключ такой вообще есть прежде чем возвращать через GetLifetime, хотя если подписчик есть в листе он должен быть и в словаре и наверное проверка просто избыточна...
Фактически использую питон с html фреймфорком и дельфи с sql. Крч фуллстак фокусник на зарплате
576x1024, 0:11
>>23196
Остался огромный легаси проект по взаимодействию с БД Firebird, в котором храняся данные о товарах и клиентах кабанчиков. Это БД говно, которое нельзя дропнуть, но работает во всяких лазарусах из под коробки.
Для каждого отдела свой ГУИ, который вызывает окно, в котором окно, в котором еще окно. Собственно в каждом окне новая таблица из джойнов или селектов. Вложенность уровня на 3 минимум. Фич так дохуя, что проще доку на 50 страниц ебануть либо каждому пользователю тет-а-тек показывать как работает. Кабанчики охуевают и не могут рабобраться в меню программы лол. Сложно слишком
Проект просто тысячи тысяч строк ибо там штук 5 отделов. У каждого штук 7 таблиц, которые вместе составляются джойнами в другие таблицы (минимум 30 таблиц). Ну и постоянно идет добавление сранных полей. Кабанчики это любят пиздец. Я не работаю с этим, а мой коллега создавший этого огромного монстра. Там можно и документ создать, и в печать отправить, и картинки посмотреть, и чего только нет чем пользуются раз в 100 лет. Оверинжиниринг во все поля.
Проект не рефакторится годами, а только расширяется и обрастает фичами уже хуй знает сколько лет. Все на старом паскале, вроде семерке. Док не существует, а есть только живой автор программы в наличии.
Думаю со временем мне поручат сделать более упрощенные аналоги с такими характеристиками:
- сделать много маленьких программ вместо одной большой на отдел для разных задач с максимум 2 уровенями вложенности вместо 3-4 чтобы даже секретутки могли без жопной боли пользоваться
- написать простенький мануал
- использовать свежие исходники (лазарус)
- использовать рукописный код (местами быстрее дефолтных компонентов) от текущего проекта
В резюме потом напиши ачивку "Архитектурный астронавт 3-го класса".
>ну для решения этого вроде есть x:Shared
Это что такое? Читал про SharedResourceDictionary, но это какие-то самопальные классы.
Ясно, это атрибут Shared в словаре ресурсов. По умолчанию true и значит элементы работают с одним и тем же экземпляром.
В общем, сложно понять было т.к. выдранный мною текст на скрине датируется чуть ли не десятилетием назад.
Почему форму предлагают набирать текстом вместо того чтобы ее удобно нарисовать в десингере?
Рыться в атрибутах хмла по памяти vs щелкать удобные кнопочки в инспекторе свойств - почему выбирают первое?
А ты попробуй. И когда надоест выискивать нужный контрол в тулзах и нужное свойство в свойствах, да надоест пытаться попасть в нужное место на дизайнере, да design-data впиливать чтобы визуал был, да постоянно править хамл за дизайнером, а стили так вообще дизайнером никак, то вот придешь и напишешь ответ челу что спрашивает "почему предлагают набирать текстом"
Пжди, в дизайнере тоже рисуется на xaml.
У меня даже стили как таковые основаны на UserControls, чтобы в риалтайме видеть превью, а сам стиль — чисто привязка данных к общей теме или комбинация вариаций UserControls.
Но таки да согласен, что синтаксис ксамл — мегауебанская вещь, но лучше, чем ничего.
>вместо того чтобы ее удобно нарисовать в десингере?
Как нарисовать с зависимостями и привязками? Это надо что-то уровня шаблонов CAD делать (впрочем, я не против), но наступит момент, который кроме как кодом не выразить никак — появится очередная сепарация, что запутает еще сильнее.
А так, я все сложное и так рисую в векторных редакторах, а потом экспортирую как SVG. В целом, получился такой многоступенчатый процесс от общего к частному и количество xaml-разметки сведено к минимуму — служит тупо для ввода параметров.
1. Окно свойств полноценно не доступно для стилей, а без них будет двойная работа.
2. У меня оно находится на втором мониторе, да и панель элементов свернута. Т.е. речь идет о скорости доступа.
И порой ме-е-е-е-дленное выдвижение панели элементов с анимацией настолько бесит, что легче начать писать <But и автозаполнение само все напишет быстрее, чем если бы ты вел курсор к панели элементов, искал в списке Button, а потом эта кнопка естественно помещается не в тот контейнер — ты снова лезешь в xaml и вырезаешь и вставляешь в нужное место, потом тебе нужно в эту кнопку что-то вставить, и тебе нужно менять укороченный вариант тэга на расширенный (в то время как при печати тебе достаточно напечатать "/" чтобы получить короткую версию и ">" чтобы получить расширенную)
А так кто как хочет, то так дрочит. Результат один и тот же. Сам использую и то и другое, особенно использую окно свойств, когда забываю как назывался параметр.
я не понимаю твое понимание lifetime и что ты вообще под этим понимаешь
lifetime token идентичен CancellationToken. Вот как ты получаешь CancellationToken и по нему можешь узнать что тебе нужно остановиться, и передаешь его дальше.
Так и lifetime токен ты получаешь извне и он означает время твоей жизни. И ты сам следишь за этим токеном и диспозишься когда токен всё, а также передаешь его другим с семантикой "вот мой токен, когда он протухнет, значит я умер, отпишите/удалите меня у себя"
допустим у меня MVVM. У меня есть окно/workspace и он держит у себя LifetimeDefinition (аналог CancellationTokenSource) и всем раздает токены lifetime. Когда окно закроется, то lifetime протухнет и всё зависящее схлопнется.
Моя вьюмодель зависит от времени жизни окна (она должна умереть с закрытием окна) и получает токен lifetime в конструктор. Теперь она может подписаться на смерть окна, а также передать этот токен дальше чтобы все кооперативно узнали, что компонент сдох и больше не живет.
В случае с шинами это берем любую реализацию у которой есть подписка отписка вида (допустим шина с интерфейсами хендлерами может выглядеть так
bus.Subscribe(obj)
bus.Unsubscribe(obj)
и пишу метод расширение
static void Subscribe<T>(this Bus bus, Lifetime lifetime, ISubsciber<THanler> subscriber){
lifetime.Bracket(
()=>bus.Subscribe(subscriber),
()=>bus.Unubscribe(subscriber),
)
}
и использую во вьюмодели
bus.Subcribe(lifetime, this)
мне не нужно бояться что я забыл отписаться. когда мой лайфтайм (в котором я живу) сдохнет, то все отпишется.
я (вьюмодель) даже не знаю что кому то нужно отписываться. У меня нет диспоза и я не хочу знать что у кого то он есть - я передаю им токен жизненного цикла в котором я живу и пусть сами разбираются.
по факту расширение адаптирует любую стороннюю шину но неудобно ибо легко забыть взять перегрузку с lifetime
поэтому я обычно делаю форк шины где удаляю обычные методы подписки
также и с обычными событиями (гадость)
lifetime.Bracket(
()=>bus.SomeEvent+=Handler,
()=>bus.SomeEvent-=Handler,
)
я не понимаю твое понимание lifetime и что ты вообще под этим понимаешь
lifetime token идентичен CancellationToken. Вот как ты получаешь CancellationToken и по нему можешь узнать что тебе нужно остановиться, и передаешь его дальше.
Так и lifetime токен ты получаешь извне и он означает время твоей жизни. И ты сам следишь за этим токеном и диспозишься когда токен всё, а также передаешь его другим с семантикой "вот мой токен, когда он протухнет, значит я умер, отпишите/удалите меня у себя"
допустим у меня MVVM. У меня есть окно/workspace и он держит у себя LifetimeDefinition (аналог CancellationTokenSource) и всем раздает токены lifetime. Когда окно закроется, то lifetime протухнет и всё зависящее схлопнется.
Моя вьюмодель зависит от времени жизни окна (она должна умереть с закрытием окна) и получает токен lifetime в конструктор. Теперь она может подписаться на смерть окна, а также передать этот токен дальше чтобы все кооперативно узнали, что компонент сдох и больше не живет.
В случае с шинами это берем любую реализацию у которой есть подписка отписка вида (допустим шина с интерфейсами хендлерами может выглядеть так
bus.Subscribe(obj)
bus.Unsubscribe(obj)
и пишу метод расширение
static void Subscribe<T>(this Bus bus, Lifetime lifetime, ISubsciber<THanler> subscriber){
lifetime.Bracket(
()=>bus.Subscribe(subscriber),
()=>bus.Unubscribe(subscriber),
)
}
и использую во вьюмодели
bus.Subcribe(lifetime, this)
мне не нужно бояться что я забыл отписаться. когда мой лайфтайм (в котором я живу) сдохнет, то все отпишется.
я (вьюмодель) даже не знаю что кому то нужно отписываться. У меня нет диспоза и я не хочу знать что у кого то он есть - я передаю им токен жизненного цикла в котором я живу и пусть сами разбираются.
по факту расширение адаптирует любую стороннюю шину но неудобно ибо легко забыть взять перегрузку с lifetime
поэтому я обычно делаю форк шины где удаляю обычные методы подписки
также и с обычными событиями (гадость)
lifetime.Bracket(
()=>bus.SomeEvent+=Handler,
()=>bus.SomeEvent-=Handler,
)
выбрал сисярп
начал писать свою обертку над апи телеги
карочи
см пик 1
жсон результат запроса - ок выводится
см пик 2
хули
GetMeResponse? requestResponse = JsonSerializer.Deserialize<GetMeResponse>(result);
null возвращает?
алсо вопрос по пик2
см пик 3
мне тут райдер подсвечивает шо поля должны называться с заглавной буквы, хотя в апи телеги ключи в жсон с маленькой, как это обойти?
а блин, рили, в глаза долбанулся и не прочел что пишет, слишком часто это сообщение видел о том что с заглавной поля должны быть
пиздос наркоманство кстати
Не знаю как в шарпах, но в бейсике с заглавной нужно писать публичные свойства, а не поля. А вот приватные поля в шарпе точно пишутся с малой буквы.
Насчет публичных полей — вопрос, вроде как не делают так.
Но опять же это просто замечание к общим стандартам форматирования, а не ошибка.
так я тоже не понимаю. я хз что такое CancellationToken
можно где-то посмотрет на то что делает lifetime.Bracket(sub, unsub) у тебя?
Bracket принимает 2 лямбды в первой подписывает если лайфтайм еще жив, вторая будет вызвана когда лайфтайм умрет
Посмотри же доклад на ютубе. Там все это есть и поясняют зачем
Но если ты не знаешь про CancellationToken то значит ты на знаешь основные элементы дотнета и тут уж увы
Тоже раньше не понимал про какие токены говорят.
Они юзаются, чтобы завершить всякую асинхронную порашу.
На самом деле там три строки всего.
Я так делал аналог модального окна на асинках. Пока флаг не поменяю, не будет возврата с асинхронной функции.
они появились в 4 дотнете
но вообще это очень простая вещь
CancellationTokenSource + CancellationToken
TaskCompletionSource + Task
LifetimeDefinition + Lifetime
они как братья - все дают токен, который передается всем желающим и могут следить за изменением токена. А менять состояние токена может только тот, кто его создал
Lifetime токен имеет implicit cast в CancellationToken
Если вдруг в юнити нет CancellationToken то как же вы отменяете операцию что перестала быть актуально?
>CancellationTokenSource + CancellationToken
>TaskCompletionSource + Task
Ах да, для своего псевдомодального окна >>23950 я использовал TaskCompletionSource. Создаешь CancellationTokenSource в функции Show и функция уходит в ожидание, пока ты делаешь в окне свои дела, а потом в событии Close меняешь флаг CancellationToken и функция Show возвращает результат.
И все работает без всяких бесконечных циклов.
А CancellationTokenSource использовал в асинхронных функциях с бесконечными циклами, чтобы прервать их работу. Например когда пытаешься подключиться к серверу, а он долго не отвечает. Тогда ты меняешь флаг в токене и асихронная функция это детектит и прекращает свои попытки подключиться к серверу.
разборался, я не указал что ok и result имеют геттер/сеттер
схуя ли оно молча False и null подставило((
А что у вас в жабаскрипте по умолчанию true?
По поводу Null, не все приняли однозначно нововведение, это вроде можно отключить в настройках. У меня в бейсике булевые переменные по умолчанию false возвращают.
>А CancellationTokenSource использовал в асинхронных функциях с бесконечными циклами, чтобы прервать их работу.
ну вот лайфтайм то же самое, просто семантика "вы еще живы"
при отмене CancellationToken ты прекращаешь операцию, при терминации лайфтайма ты выполняешь отписку/очистку и те же отмены операций если что то выполняется (lifetime передается туда где принимается CancellationToken)
Ничего этакого в идее нет. суть в реализации - жетбраинсы поясняют проблему порядка терминации, многоступенчатой терминации, выполнение тасков (которые пока выполняются запрещают смерть лайфтайма чтобы гарантированно жил ресурс) и так далее.
>ну я ожидал что если сеттера нету, рантайм ошибку выстрелит
так у тебя же на скрине в свойствах есть и геттер и сеттер.
Так GetMeResponse это класс, кек. При чем здесь геттер и сеттер?
У тебя там в поле щас пусто — Nothing (Null в этом вашем шарпе). Никто туда не поместил новых экземпляров, вот и пусто.
А если поместят, то вернет экземпляр этого класса (че ты там хотел выводить в консоль? Как ты это себе представляешь?)
bool ok — это ваще структура, а структуры имеют дефолтные значения. у int это 0, у bool это false. В новых версиях шарпа и структуры можно заставить возвращать Null, но это другая история.
Почитай про различия классов от структур.
> да, и у него есть поля ok и result
у полей ok/result нету геттера и сеттера
соответственно
JsonSerializer.Deserialize<GetMeResult>(result);
просто не смог туда ничего сложить
насколько я понял
Смог но не захотел
Потому что они не свойства
А сериализатор ищет свойства
А поля.... В зависимости от сериализатора и настроек можно
Ах вот ты про что. Ну про причуды шарпа я не знаком.
В бейсике есть укороченное свойство как у тебя написано без геттера и сеттера, а есть расширенная — с ними.
Поля вообще так не используют, они больше используются внутри классов. Для "внешнего мира" используют свойства.
да то же самое же. нет никаких отличий
есть поля, есть свойства. Все пишут get/set на автомате забыв различия
>>24035
сериализатор жсон работает со свойствами просто "ну все используют свойства"
кто хочет чтобы сериализатор видел поля нужно использовать опцию
JsonSerializerOptions.IncludeFields
А имена дай нормальный и используй [JsonPropertyName9"aaa")]
>Все пишут get/set на автомате забыв различия
Я только сейчас задумался как вы вообще отличаете поля от свойств.
У нас это ключевое слово Property, а у вас это наличие get/set, видимо.
>Я только сейчас задумался как вы вообще отличаете поля от свойств.
Свойство - это по сути сахар над полями, позволяющий их инкапсулировать.
Конвенционально - в шарпе не принято делать публичные поля. Т.е. все что ты делаешь публичным должно иметь геттер и/или сеттер/инициализатор (развернутые или пустые - не важно)
private int _myVar; - поле
public int MyVar {get; init; } - свойство
public myvar; - говнокод
Это все, естественно, если ты кодишь в ООП стиле. Если что-то другое, то можешь не заморачиваться.
Выстраивал по MVVM паттерну. У меня же все сбиндено ко вьюмодели. Я же не могу просто удалять итемы — иначе удалятся ноды из базы.
В общем, вот мое https://pastebin.com/gMmfyPbi
Задачка - https://www.codewars.com/kata/52742f58faf5485cae000b9a
Регистрируем сервис:
interface IService {}
class Service : IService
{
public Service() {}
}
services.AddTransient<IService, Service>();
А как зарегистрировать сервис c параметром в конструкторе?
class Service : IService
{
public Service(string yoba) {}
}
Это заговор, чтобы заставить тебя страдать!!!
или нет
это просто показывает твою ничтожность, что никто не хочет уделять тебе внимания!!! - вот
или все гораздо проще - первой ссылкой открывается код, который ни о чем без задачи
А потом открывается сама задача и там "чет страшное на буржуйском, влом разбираться"
> чет страшное на буржуйском, влом разбираться
Кхм. Я думал все кодеры как минимум читать умеют на буржуйском(((
>Шарпач, покритикуй решение задачки.
- Простыня из if-ов
- Магические цифры (имею в виду индексы массивов), через день ты заебешься вспоминать за какой период у тебя отвечает _data[2]
- Использование массивов в логике.
- Если придется добавлять какой-либо период (например недели), то это будет ебанина.
>>24723
согласен с этим
смотри, тут принцип простой, когда встречаешь код как на пик1 можешь начинать думать над рефактором, сейчас ты копипастишь вайл циклы, завтра копипастишь функционал в 3х разных местах
пик2
та же трабла с копипастой
тебе точно в каждом ифе нужно проверять _timeItmes?
ну и _data[n] как анон сказал никуда не годится, хэшмапу штоли юзай или словарик я с доступом по ключу
и нейминг, да, что вообще за _data? Ты бы смог в моем коде, если бы встретил data[4] понять что получишь на выходе не смотря в место где происходит инициализация понять что вообще за _data и что я получу на выходе?
мимо жаваскриптер
>>24737
Спасибо. Со всем согласен. Нужно наверное было после того как прошлись тесты - посмотреть свежим взглядом и избавиться от простыни ифов и циклов.
>>24723
А вот к тебе еще и вопрос. Ты сразу сел и придумал такое решение? Просто как? Я вот не понимаю. Я - написал тестики по примеру задачки. Начал писать реализацию. Сделал. Тестики прошлись - залил на кодварс. А как придумать сразу чтобы красивенько было - хз...
Чтобы не писать this. Чтобы все приватные поля сразу были видны в подсказке, если в редакторе _ клацнул.
Событие ScrollChanged происходит уже после скроллинга.
>Он же только захламляет код и ухудшает читаемость.
Тогда у тебя будет куча this. что еще больше захламляет код и ухудшает читаемость.
this можно писать только при коллизиях, а ебучий андеркейс засоряет весь код как раковая опухель
плюнул в ебало дебилам которые протащили андеркейс в стайл гайд от майков
Двачую. С парой полей еще ничего, но от большого количества в коде начинает рябить в глазах.
>Ты сразу сел и придумал такое решение?
>Просто как?
Знания и опыт.
1) Изучай инструменты которыми пользуешься. Во первых специфические (напирмер сам C# и его библиотеки, фреймворки), во вторых общие (саму теорию программирования, математика, логика, комбинаторика и т.д.)
Вот тебе пример. Если посмотреть на пример из твоего же кода на пике. Ты берешь общее значение секунд и вычитаешь из него значение года в цикле, чтобы определить количество лет помещающихся в нем и остаток на другие периоды. Тогда как знай ты математику знал бы, что это решается всего двумя действиями. Первое результат целочисленного деления years = second / year и второе результат остатка от деления nextPeriod = second % year
Ты не используешь этого нигде. Почему? Потому что когда ты изучал базу, ты в раздел возможные операторы максимум один раз заглянул и перешел дальше. Ты не прорешал базу, например не разобрал как работают разные типы деления в языке. Это как в школе пытаться решать квадратные уравнения не изучив при этом таблицу умножения и вообще его принципы. Так же и в программировании.
2) Возьми себе за основу, что если ты пишешь код в котором есть повторяющиеся куски, то это плохой код. Если ты написал два одинаковых цикла, отличающиеся только парой переменных, то это нужно переписывать. Понятно, что из этого правила есть куча исключений, но в большинстве случаев это работает так. Увидел повторяющийся код, хотя бы попробуй переписать так чтобы его не было. Например в моем примере тоже есть место которое можно улучшить, цепочка одинаковых вызовов GetTimePart, которые можно было бы засунуть в цикл, если немного помудрить с константами и засунуть их в словарь.
3) Практика и задрачивание. Вот если ты набрал код с моего скрина >>24723 , погонял его в отладчике, понял как он работает. Попытался его доработать и улучшить по своему, вот тогда тебе это пошло на пользу. Почитай еще что-нибудь по теме. Например если ты почитаешь инфу по типам TimeSpan, DateTime, а так же форматированию при их конвертации через ToString, то поймешь, что вообще в C# эту задачу можно в несколько строк решить.
>Ты сразу сел и придумал такое решение?
>Просто как?
Знания и опыт.
1) Изучай инструменты которыми пользуешься. Во первых специфические (напирмер сам C# и его библиотеки, фреймворки), во вторых общие (саму теорию программирования, математика, логика, комбинаторика и т.д.)
Вот тебе пример. Если посмотреть на пример из твоего же кода на пике. Ты берешь общее значение секунд и вычитаешь из него значение года в цикле, чтобы определить количество лет помещающихся в нем и остаток на другие периоды. Тогда как знай ты математику знал бы, что это решается всего двумя действиями. Первое результат целочисленного деления years = second / year и второе результат остатка от деления nextPeriod = second % year
Ты не используешь этого нигде. Почему? Потому что когда ты изучал базу, ты в раздел возможные операторы максимум один раз заглянул и перешел дальше. Ты не прорешал базу, например не разобрал как работают разные типы деления в языке. Это как в школе пытаться решать квадратные уравнения не изучив при этом таблицу умножения и вообще его принципы. Так же и в программировании.
2) Возьми себе за основу, что если ты пишешь код в котором есть повторяющиеся куски, то это плохой код. Если ты написал два одинаковых цикла, отличающиеся только парой переменных, то это нужно переписывать. Понятно, что из этого правила есть куча исключений, но в большинстве случаев это работает так. Увидел повторяющийся код, хотя бы попробуй переписать так чтобы его не было. Например в моем примере тоже есть место которое можно улучшить, цепочка одинаковых вызовов GetTimePart, которые можно было бы засунуть в цикл, если немного помудрить с константами и засунуть их в словарь.
3) Практика и задрачивание. Вот если ты набрал код с моего скрина >>24723 , погонял его в отладчике, понял как он работает. Попытался его доработать и улучшить по своему, вот тогда тебе это пошло на пользу. Почитай еще что-нибудь по теме. Например если ты почитаешь инфу по типам TimeSpan, DateTime, а так же форматированию при их конвертации через ToString, то поймешь, что вообще в C# эту задачу можно в несколько строк решить.
Лучше так не делать. Всё-таки прелесть DI-конструкторов в соблюдение принципа DIP.
>>24910
>1) Изучай инструменты которыми пользуешься. Во первых специфические (напирмер сам C# и его библиотеки, фреймворки), во вторых общие (саму теорию программирования, математика, логика, комбинаторика и т.д.)
Например изучить TimeSpan, который по умолчанию конвертирует секунды в минуты, часы и дни.
>Например изучить TimeSpan, который по умолчанию конвертирует секунды в минуты, часы и дни.
В конце ответа про это есть.
Я не совсем точно описал. Чтобы можно было сделать вызов типа GetRequiredService<IService>("YobaValue");
Кек. Ты заставляешь страдать юзера, который будет пользоваться твоей функцией. В подсказках у него будет @example. За что ты так с ним? Ты бы еще такое имя дал: ADF4-367T-DE7R
Делаешь фабрику нужную тебе.
Регистрируешь ее как сервис.
Потом
var service = GetRequiredService<IServiceFactory>().Create("YobaValue");
>>25011
ну замените собаку на что угодно например newX или _х если так не нравится собака, суть-то не поменяется, я предлагаю всю эту хуйню в аргументы вынести и оставить поля в покое
моя логика простая, чем меньше писать тем лучше
this.x = x надо писать больше собаки
_x = x и каждое поле так - надо писать больше собаки и смотрится уебищно, никакие аргументы меня не убедят, на дворе 2022, даже vscode умеет выделять приватные поля
И пусть выделяет. А kdiff выделит?
>ну замените собаку на что угодно
Ничего вообще не должно быть. Имена аргументов и публичных свойств должны быть максимально ясны — это первостепенное правило, а уж внутри класса ты изъебывайся как хочешь. Вне зависимости от яп.
Все равно что на кнопках твоей микроволновки будет вот такая вот ебатория $::Start:: вместо Start. Класс это такой же законченный продукт и он должен выглядеть прилично.
https://github.com/dotnet/runtime/issues/75933
Предлагают писать уродливый код вместо оптимизации во время компиляции.
https://steven-giesel.com/blogPost/34e0fd95-0b3f-40f2-ba2a-36d1d4eb5601
Добавляют ещё кучу "замороженных" коллекций.
https://www.youtube.com/watch?v=cwBrWn4m9y8
У комьюнити появилась какая-то нездоровая дрочь на низкоуровневые оптимизации.
>У комьюнити появилась какая-то нездоровая дрочь на низкоуровневые оптимизации.
Которые убьются xaml-стилями.
Спасибо
>В подсказках у него будет @example.
Самое смешное, что в подсказке у него не будет варианта с @, будет просто exapmle (по крайней мере в студии). Поэтому его говно и хуже.
Поясню. Например у меня есть солюшен со структурой как на 1-м пике. Допустим я хочу добавить сущность Document и соответствующую обвязку к ней в виде репозиториев, сервисов, контроллера, интерфейсов и ДТО (как на пике 2)
Хочу чтобы студия по команде сама создавала мне нужную структуру во всех проектах (каталоги, файлы) с именами соответствующими сущности и с шаблонами кода для каждого файла.
Примечание 1: Как создать шаблон для солюшена для создания с нуля с нужной структурой и кодом - я знаю. Тут речь о вставке шаблонов в уже готовый проект.
Примечание 2: Сниппеты не подходят, т.к. это на уровне "вставить кусок кода в текущий файл", нужен более широкий функционал.
Тут речь о вставке шаблонов в уже готовый проект.
Ну так пиши расширения для студии, там больше возможностей, чем у чмоппетов.
>Тут речь о вставке шаблонов в уже готовый проект.
Да именно оно.
>Ну так пиши расширения для студии
Ну так я этого и хотел избежать, думал, что готовое уже что-то есть.
>Ну так пиши расширения для студии, там больше возможностей, чем у чмоппетов.
Анонч, а какие способы кодогенерации есть в C#? Чтобы программно создать какой-либо класс из шаблона, сделать автозамену нужных параметров и закинуть его на диск? Почитал про Т4, но такое ощущение, что это не то.
>Чтобы программно создать какой-либо класс из шаблона, сделать автозамену нужных параметров и закинуть его на диск?
Ну вот мне пришлось для подобных задач вкатиться в плагины. Там ничего сложного даже с моими, так сказать, способностями, даже при том, что я писал на бейсике, а плагины можно делать только на шарпе.
Единственное, что нужно время на написание всего — это очевидно.
По установке деталей не помню, там устанавливаешь нужные компоненты (из меню средства и компоненты) и дальше у тебя появляется шаблон для создания плагинов на C#. Есть видео основ
https://youtu.be/Pk7jdsvEhfc
У тебя там тесть триггеры которые запускают твои команды плагина (типа при старте программы, или при запуске решения и т.д. их там дохера), ну или добавляешь кнопку запуска в меню студии.
Далее есть функция, которая позволяет получить инфу из твоего решения. Самое примитивное — получить текст с текущего документа или выделенный фрагмент текста.
Насчет структуры решения — хз, там надо покопаться и определить что есть, а чего нет.
Не все есть. Например у меня были проблемы с выводом в окно интерпретации, потому что плагин работает отдельным потоком и для него твой экземпляр студии — пустое место. И у меня было такое, что в режиме отладки все норм выводится, а релизная не хочет ничего печатать. Не помню как я там извернулся, по-моему печатал в полоску статуса.
В остальном обычное решение с проектами, функциями, окнами — что хочешь, то и воротишь. Разница только в начальном шаблоне.
>Почитал про Т4
Хз что это. Просто гугли Visual Studio Extensions.
>По установке деталей не помню, там устанавливаешь нужные компоненты
С этим уже разобрался.
>У тебя там тесть триггеры которые запускают твои команды плагина
С этим тоже.
>Например у меня были проблемы с выводом в окно интерпретации, потому что плагин работает отдельным потоком и для него твой экземпляр студии — пустое место.
С потоками тоже понятно.
>В остальном обычное решение с проектами, функциями, окнами — что хочешь, то и воротишь. Разница только в начальном шаблоне.
Ну это да. Но вот я смог получить инфу по солюшену и по проектам. Могу создать нужные каталоги и даже файлы с простой самодельной кодо-генерацией. Но вот как прокинуть их в сами проекты пока не разобрался.
>Ну это да. Но вот я смог получить инфу по солюшену и по проектам. Могу создать нужные каталоги и даже файлы с простой самодельной кодо-генерацией. Но вот как прокинуть их в сами проекты пока не разобрался.
На крайняк создавать файлики в решении, а потом как-то их аттачить командой. Как аттачить — это надо искать.
>вместо оптимизации во время компиляции.
ась? как компилятор узнает что нужно оптимизировать
А так да - аж через 20 лет они поняли что нужны фрозен коллекции. Это те, что в котлине и питоне изначально.
Что тебе не ясно? Вот есть класс
BookDto {
public string Name {get; set;}
public int PageCount {get;set;}
public string AuthorName {get;set;} }
Мне на контроллер приходит запрос на изменение, где Name="ZalupaKonya", PageCount = 666, а AuthorName = null, вопрос собственно в том, как понять, хотел сделавший запрос обнулить имя автора или же просто не хотел его менять.
такое просто не пройдет валидацию же. а там как сделаешь - может вернешь анпроцессаблеентити или еще как.
а если нулл это штатно то как ты собираешься отличать? ты же не влезешь в мозг пользователя. ну можешь на клиенте переспросить и добавить бул поле, мол это ТАКОЕ
>такое просто не пройдет валидацию же. а там как сделаешь - может вернешь анпроцессаблеентити или еще как.
Если свойство указано как nullable то всё спокойно пройдёт. Вообще я решил проблему заведя словарь. При обновлении свойства в нём соответствующему ключу присваивается true
>как понять, хотел сделавший запрос обнулить имя автора или же просто не хотел его менять.
Валидатор прикручиваешь и натравливаешь его на Dto
>Вообще я решил проблему заведя словарь. При обновлении свойства в нём соответствующему ключу присваивается true
Хуйню ты сделал.
>И как это поможет?
Ты в валидаторе можешь прописать любые правила для любого поля/набора полей. Прописываешь, что данное поле не должно быть null и тип ошибки который должен выкинуться. А дальше уже строишь логику от этого, либо даешь отлуп, либо продолжаешь но по другой ветке алгоритма.
>И как это поможет?
RuleFor(x => x.AuthorName ).NotNull().WithErrorDescription(DirectionErrors.AuthorNameIsNull);
Ах, ну да. Спасибо.
Так в том то и дело, что я хочу, чтобы поле могло быть null
Возможно шутка про жаву была лишней. У самого было чувство, что перегнул палку, так что, выражаю модерации свои глубочайшие извинения, и тем, чьи посты попали под удар.
Вот делаю я ебучию OAuth 2.0
В инструкции пишут
>code_challenge=<base64url(SHA-256(code verifier))>
>To create a code challenge your application will first need to create a one time use code verifier. A simple way to do this is to generate 32 random bytes and base64url encode them. Store this code verifier as you’ll need it in a later step. To create a corresponding code challenge, SHA-256 hash the code verifier, and then base64url encode the raw hash output. The base64url encoding is defined in RFC 4648 and should not contain padding. If you’d like to see an example of creating a code challenge in Python you can find that here. Feel free to contribute examples in other languages to this repository to help others.
Создаю массив рандомных байтов
Random rnd = new Random();
byte[] b = new byte[32];
rnd.NextBytes(b);
return b;
Далее делаю из него SHA-256 далее делаю из него бейс64 через https://github.com/neosmart/UrlBase64 что бы было url-safe генерирую ссылку и отправляю
На сайте авторизуюсь и получаю код на калбек.
Далее по инструкции
>Now that your application has the authorization code, it needs to send a POST request to https://login.eveonline.com/v2/oauth/token with a payload containing the returned authorization code, the client ID of your application, and the original URL safe Base 64 encoded 32 byte string that was randomly created for the code challenge in step 3.
Мне нужно отправить оригинальный код в бейс64 пост запросом что я и делаю в пикриле и получаю ответ что не верный код сука.
Я у себя сравниваю эти коды, тот который я отправил первый раз и тот который во второй, я его из бейс64 в массив байтов, потом в SHA-256 потом в бейс64 и получается такой же как и первый.
Я что то не то отправляю? Или там как то по другому они проверяют коды? Пздц блять нахуй
Так хуярь его в авторизацию, а не в боди.
Погоняло у тебя дегенерат. Почитай шапку, а именно открой вторую ссылку.
Вот она на английском: https://libgen.is/book/index.php?md5=20E870EB08B33873A7039EE837D422A2
И ничего никочает. Один торрент с нулем пиров, сбоку есть ссылка на 28гб добра, но пиров тоже негусто. Швабода файлообмена пиздец просто. Все через жопу у анальников!
.net и .net framework отличаются только кроссплатформой?
asp.net внутри .net сильно отличается от asp.net в .net framework?
вопрос к вопросу выше, правильно ли я написал или название asp.net и asp.net core две абсолютно разные вещи?
nuget пакеты доступны внутри .net framework?
Зачем сделали asp.net mvc, если это просто паттерн или это тоже фреймворк внутри фреймворка?
Как разобраться в этой архитектуре?
Что-то сильно наворотили майки, еще переименовали .net core
просто .net
>.net и .net framework отличаются только кроссплатформой?
нет не только. они хотели сделать новое и чистое и с нуля
то есть "переписать нахрен выбросив легаси"
В итоге выбросили концепцию AppDomain, Thread.Abort, WCF, DataTable и не помню еще чего - из за чего даже тот же Slqite либа не могла переехать и они запилили свою
Потом из этого часть таки портировали для совместимости в коре 2.
.net framework можно получается не трогать, если не собираюсь в банках говно мамонта ковырять? Можно сразу идти в изучение .net (.net core), т.к это современная реализация включающая в себя asp.net или asp.net реализация в .net framework отличается от современного внутри .net (.net core)?
>если не собираюсь в банках говно мамонта ковырять?
Чел, я сейчас в банке сижу и переписываю сервисы с Core2.1 на .NET6. Хуй ты сейчас найдешь где-нибудь .Net Framework, кроме заводов и совсем отсталых гос.контор.
>>26700
>Можно сразу идти в изучение .net (.net core),
Да учи сразу .NET6, ну или на крайний случай .NET Core3.1 (не ниже)
Ну и еще .NET Standart 2.0 тоже нужен бывает.
Да какая разница, в рантайме всё jit оптимизирует
>Хуй ты сейчас найдешь где-нибудь .Net Framework
Зависит от задач. Мне например надо было декомпилирвоать в IL-код, редактировать и снова упаковывать в dll. А для Core у майков нет тулзы для этого — только для dll на нетфреймворке.
Ну и раз уж такая тема, то вопрошаю есть ли какие-то варианты как на этапе конпиляции студии как-то пошурудить IL-код?
Fody
>.net и .net framework отличаются только кроссплатформой?
Не знаю как asp.net, там какая-то осбенноая платформа и вечно жалуются, что пирмеры из книг к прошлым версиям не запускаются, но в WPF я даже не заморачиваясь просто копипащу из .net framework в .net
Ну разве что с нюгетами надо быть аккуратнее т.к. либы там бывают в двух версиях, но вроде как проект .net поддерживает обратную совместимость с либами на .net framework.
>Хуй ты сейчас найдешь где-нибудь .Net Framework
Santander, mBank (Commerzbank), XTB, Uniqa. Это клиенты с .net Framework за последние 2 года и только некоторые планируют переходить на .net core. И у всех из них большая часть ключевого функционала висит на framework.
Факт, что сейчас намного выгоднее работать с кором, на перспективу развития, да и интереснее, но из-за этого растут ставки на EF ещё потому что это наверняка легаси, а это никто не любит
Только вот не очень важно того что кто-то сидит на говне мамонта - если всё равно там не работать
А, нашел полный на рутрекере
Там тоже на английском.
Некроёб на связи. Как поставить .net 4 sdk на шинду 10? Сам пакет стоит по дефолту но вот sdk не ставится. В интернете нашел пока установщик для вин 7, но он вываливается с ошибкой. Алсо, у меня на работе есть пк с 10 виндой и этой sdk, её можно как-то оттуда перенести?
У меня ощущение, что я добровольно лезу в трясину, которая делает мне хуже.
>переписываю сервисы с Core2.1 на .NET6
Зачем? Чтобы что? Не понимаю логику таких переписоывателей. Потом будешь переписывать .NET6 на .NET8 чтобы вкатуны-сузихлебы не терялись от дидовского синтаксиса трехлетней давности? ИБД натуральное.
вот есть приложение, к нему подключается длл, подписывается на эвент передающий объект и проводит над ним операции.
к этому же приложению подключается мой длл, подписывается на этот же эвент и делает почти тоже самое но иначе.
первый длл сыпет эксепшонами после моих манипуляций если ему не дать отработать перед моим.
менять чужой код я не могу.
что делать посоны? как гарантировать порядок выполнения?
весь код синхронный.
твое приложение же - гарантируй очередность загрузки и инициализации плагинов. приоритеты или что то такое.
так он скажет это из-за длл того мудака(меня), удоляйте.
короче какой-то клин.
приложение вообще никаких очередностей не поддерживает.
автор другого длл пидор и собака на сене.
я дебил и не могу придумать обходной путь.
а ты скажи что так то норма ожидать что объект придется не девственно чистый. Скажи что твой супер длл обрабатывает эту ситуацию, а его длл нихера проверок не делает и вообще он рукожоп
так что в споре ты прав. и в общем то так и должно решаться.
это не решение. за это время уже могут начать лететь события.
Допустим у меня есть две библиотеки, одна анализирует файлы и формирует данные, а другая эти данные обрабатывает и выводит на экран.
И та и другая библиотека может обратиться дург к другу в любой момент. Я не могу в каждую добавить зависимости дург дурга — получается зацикленность.
Делать проект-мост и тупо ретранслировать команды? А если в одном преокте 50 команд, и в другом 50 команд, то мне придется делать лишнюю работу и создавать 100 команд. А если в одном проекте добавятся команды? Хуйня какая-то.
Как этот ваш принцип солида поддерживать?
может сделать как-то:
1. если в ассембли есть его длл
2. каким-то образом подцепиться к ЕГО обработчику в рантайме через рефлексию и когда он закончит, жахнуть мой эвент
3. получится что-то типа гетто цепочки вызовов и все довольны
ну если не хочется сообщениями то просто делай отдельный(е) проекты с контрактами. В рантайме ты можешь гарантировать что будет их реализация. Вот на эти проекты и ссылайся
Посмотри на тот же DI от мелких - у них есть отдельная сборка .Abstractions где собственно сами интерфейсы, на которые все и ссылаются.
Короче, семеро гномов решили трахнуть Белоснежку.
Один гном в бегает к ней в спальню, другие стоят за дверью.
Первый гном кончил, второй гном кончил, третий гном кончил, четвёртый гном кончил, пятый гном кончил, шестой гном кончил, седьмой гном кончил, первый гном слез с Белоснежки.
а белоснежка-то что? эксепшонами сыпет или ей норм? взлетит?
не выйдет. просто не выйдет.
все упрется в "каким то образом"
тебе негде искать его инстанс с обработчиком поэтому ты допустим лезешь в событие, достаешь оттуда делегат...и понимаешь что он еще не подписался...и что тебе тут делать а?
влезать в самое начало на старте приложения, подменять метод как тут в одном из прошлых тредов говорилось - явный перебор.
Ну тогда ничего не остаётся кроме как в цикле сканировать глобальную переменную, чтобы убедиться, что первый гном кончил.
ну я думаю как-то ждать пока не подпишется?
может таску завести и пусть ждет пока не подпишется? а когда подпишется то я сразу его обработчик и подпишу
это все ненадежные костыли
ты можешь в цикле да
но при этом ты должен допускать что за время пока ты фигней страдаешь он уже подписался и пошло событие
так событие юзеринпут
о а кстати может его как раз и авайтить? первый инпут попер = тот чел уже 100% подписался, можно пристраивать гномью многоножку к белоснежке. мне не в падлу подождать если это будет гарантировать что его обработчик уже есть и работает, а юзер скорее всего заметит только маленькую задержку при первом инпуте а дальше все будет работать нормально
просто построение LINQ и материализация спрятаны в метод с именем и параметрами.
Это то же самое что ты сделаешь метод GetItems где будешь собирать SQL (ну и выборку сделаешь) в зависимости от параметров.
Линкопетушение происходит. Никогда так не пиши! Даже за деньги так не пиши! Даже за очень большие деньги!
Если по сути кода. Есть коллекция _items сначала ее прогоняют через фильтер filter(секция where), потом результат сортируют по возрастанию или убыванию с ключем который вернет функция orderBy, затем в конце получившемуся хрючеву вызывают ToList() т.е. превращают результат из итераторов на итераторы в обычный лист.
Все вышеназваное можно написать на обычном форе более понятно, но почему сейчас так не модно. Как хорошо что в геймдеве у серьезных проектов линк не в почете. Там до сих пор живут духом молодости и ультрахардкора, пока глупые вкатуны копипастят дурной код прямо из доки микрософта.
АDO.net же. Делаешь сначала запрос со своим SQL, потом в цикле перебираешь DataTable с результатом, опционально делаешь с ним что-то осмысленное. Забытые технологии древних.
С такими советами можешь говна поесть.
>Линкопетушение происходит. Никогда так не пиши! Даже за деньги так не пиши! Даже за очень большие деньги!
аргументируешь?
>Все вышеназваное можно написать на обычном форе более понятно
мс: смотрите, чтобы не писать форы мы вам принесли новую технологию LINQ - то же самое, но декларативно - короче, читабельнее, понятнее
анон: на обычном форе более понятно
List - обертка над Array, при этом размер пустого списка неизвестен и удваивается при заполнении
то есть array по дизайну меньше кушает
содержимое значения не имет - память будет занята на моменте образования пустого array (или его же внутри List)
>анон: на обычном форе более понятно
Это факт.
У того нюфани который спросил ворос не возникло бы проблем с пониманием базового синтакса фора и пары вызовов в нем объектов переданых в качестве параметров. Просто знаешь базовый синтаксис => все понимаешь. Низкий порог входа означает, что код чистый и написан идиоматическим для языка способом.
Линкопетушение это зло как оно есть. Аргументы:
- повышает порог входа
- просирает производительность на ровном месте
- тащит функциональную парашу в красивый и могучий ОО-язык(неидиоматический код)
- разрушает системное мышление у новых нюфагов, провоцируя их писать дрист вместо объектов-хелперов с своим местом в домене приложения.
Для меня загадка почему все так подсели на это дерьмо.
> Это факт.
Нет, это чушь. Фор более понятен для тех, кто не знаком с линком, кто глянул его синтаксис никаких трудностей испытывать не будет.
> У того нюфани который спросил ворос не возникло бы проблем с пониманием базового синтакса фора и пары вызовов в нем объектов переданых в качестве параметров. Просто знаешь базовый синтаксис => все понимаешь. Низкий порог входа означает, что код чистый и написан идиоматическим для языка способом.
А ещё у нюфани не возникло бы проблем с обычным вызовом функций с передачей им аргументов, повод ли это отказывать от внедрения зависимостей?
>Это факт.
хз для кого факт.
сам я не люблю LINQ из за оверхеда
но не могу отрицать что декларативный код читабельнее императивного кода
>с пониманием базового синтакса фор
а у него и так не возникло проблем с пониманием синтаксиса. Он спросил нормально ли такое мудрить.
>- повышает порог входа
итить. это нужно быть реально дауном чтобы не понимать LINQ
это базовая интуитивная концепция
>- просирает производительность на ровном месте
угу, но не везде она нужна.
>-- тащит функциональную парашу в красивый и могучий ОО-язык(
писать в одной парадигме....фу быть таким. это деградация и застой
>провоцируя их писать дрист вместо объектов-хелперов с своим местом в домене приложения
тут я не понял ничего, но если что, то это я тоже обосрал
>Для меня загадка почему все так подсели на это дерьмо.
вещь примитивная и базовая. и немного удобная.
а перфоманс нужен не везде.
лично я LINQ юзаю мало.
>А ещё у нюфани не возникло бы проблем с обычным вызовом функций с передачей им аргументов, повод ли это отказывать от внедрения зависимостей?
Тут надо подумать логически. Если обычный вызов функций с параметрами может заменить контейнер с зависимостями, то почему нет? Делать как можно проще не скатываясь в копипасту - это добродетель.
Про это я в курсе. Покопался в теме - linq.ToArray и linq.ToList имеют разные механизмы, и лист получается быстрее и меньше в итоге.
тебе так кажется. если даже на основе IEnumerable то в обоих случаях используется одинаковая оптимизация.
>мать жива.
Но это не точно. По данным статистики только 5% программистов пользутся программами своего авторства. Они не видят все их убогой глючности, тормознутости и встратости и наивно думают что с ними все Ок.
Нет, просто не всем нравится использовать авто-сгенерированный код. Получается, что не ты сам пишешь программу. Лично меня это загоняет в депрессию.
Спустя полдня ковыряния реестра и разных установщиков с ошибками я разобрался - просто смонтировал образ проводником и внутри в папке Setup поставил руками все установки (хотя там скорее всего нужно только .net framework sdk). Дефолтный autorun (setup) и SDKSetup вываливаются с ошибками.
Вот пост: https://stackoverflow.com/questions/35733040/how-to-install-net-4-framework-in-windows-10
Первый ответ, линк Microsoft windows sdk for Windows 7 and .NET framework 4.
Мб добавьте в шапку для будущих некроёбов.
>>26972
>>26973
А вот Java SDK можно поставить любую версию на любую ОС. Мало того и на новых версиях можно спокойно выполнять программы, написанные для Java 1.0.
Его раньше тоже можно было спокойно ставить, просто сейчас он считается устаревшим, но это последняя версия фреймворка которую поддерживает XP.
Политика мастдая, щито поделать, десу.
да. тупо посмотри исходники, а не бенчи гоняй
мимо шарю за кишочки дотнета
Мудак он, а не опытный. Это из той же оперы, что и "Нафиг мне ваш гит, я лучше папочки буду архивировать по датам".
>Нет, просто не всем нравится использовать авто-сгенерированный код. Получается, что не ты сам пишешь программу. Лично меня это загоняет в депрессию.
Долбоеб ты. Депрессию иди к психиатру лечи и не распространяй свои загоны на код.
>при енумерации IEnumerable будут вызываться boxing/unboxing
Не будет, альтернатива List<T> - это IEnumerable<T>, а не IEnumerable.
>>28907
Я чётко знаю что и в какой папочке лежит, а с гитом постоянно какая-то дроч. Можно вообще всё сломать и лишится кода, а когда ковыряешь папочку, то всегда знаешь, что у тебя есть резервная.
ну и вопросы у тебя
>мимо шарю за кишочки дотнета
а расскажи почему итерация коллекции через Span<T>.Length вместо обычных count/length выходит быстрее
ох уж ты экономист на спичках.
как минимум компилятор/jit может доказать, что Length этой реф структуры не изменится и оптимизировать сей момент
мимокрок
Есть класс Unsafe. У него методы
ну или MemoryMarshal
https://pastebin.com/haXzXVRQ
и такое ТЗ:
скрипт должен находить все случаи логина пользователей в домене АD c 12:00 до 00:00 часов
Сам я в PS не але, шарящий анон подскажи - верен ли он и сможет ли найти ВСЕ случаи или только по последнему логону работает? НУ и если второе - то в какую сторону исправлять.
ээ ну ты без оскорблений плс я в основном форычей или линками гоняю где могу
просто мне ютуб подкинул видос где мужик распинался как распиздато этот Span обгоняет for и я тут такой ну нихуя себе я вообще не знал даже что так можно
Ещё про С# - очень хорошая и быстрая реализация GC и очень хорошая реализация бинарных интерфейсов. Не так хорошо как, например, в фейдже, но тоже очень хорошо. У C# очень хороший и отлаженный драйвер С/С++. Весь его компилятор написан именно на С/С++.
Я учу сишарп для того, чтобы делать крутые приложения в экосистеме майков. Это даёт мне кайф - я не люблю разрабатывать на других платформах. Я не учу сишарп для того, чтобы устроится на работу, так как работа - это не для меня.
Создать структуру, заполнить её данными и отдать в метод Struct.Copy();
Я знаю только один вариант, а именно: инициализировать структуру-цель и после этого скопировать его в нее при помощи System.Buffer.BlockCopy. А так я не люблю не-уфсейновые варианты, потому что они не безопасны и очень медленные.
Я сам ручками пишу миграции. На этот счёт у меня есть своё мнение. Я считаю, что миграции надо писать ручками, потому что миграции от мейкера - это однозначно миграции, которые в любом случае надо будет дорабатывать. Проще просто по старинке писать миграции руками, чем дорабатывать мейкерские миграции, чтобы они были не тухлыми.
Не легитимный перекат! Остаёмся в этом треде
Потому и придумали
MemoryMarshal.TryRead()
который под капотом использует ref и класс Unsafe, который под капотом использует хз че там за реализация.
Они настолько быстро всё меняют, что люди не успевают за этими изменениями. Книги отстали уже лет на 10. Тот же Шилдт и Рихтер так и не выпустили новых версий своих книг. А микрософты продолжают клепать новые версии с новым сахаром. Разве они не понимают, что язык засахарится и никто не будет понимать его? Лучше брать пример с джавы и сделать язык более стабильным.
Сахар учится легко, к тому же в MSDN всё описано понятным языком. Хуйня по сравнению с C++, где количество синтаксических фич делает язык сложнее всех популярных языков вместе взятых.
Мне удалось запомнить только стандартный синтаксис. Пишу примерно как на джаве. А все модные сахарные фичи не могу запомнить, а когда вижу в чужом коде, то не понимаю о чём там.
>MSDN-а не существует уже несколько лет.
А кого это (цензура)
для олдов что мсдн что мсдоки - те же яйца, только в профиль. Ну может заметил что домен изменился - и все.
мсдн это устойчивый термин для офдоки среди тех кто не зумер.
>это однозначно миграции, которые в любом случае надо будет дорабатывать.
Только если код на основе которого они генерятся говно, то тогда конечно надо будет дорабатывать.
>люди не успевают за этими изменениями.
Вкатыши ты хотел сказать. У нормальных людей с пониманием проблем нет.
Т.е. написать на шарпе либу, содержащую например, вот такую C++ функцию:
double _stdcall square(double &x) { return x * x; }
И чтобы это могло подключить к себе и скушать всё, что работает с аналогичными сишными либами? 1C, VBA, notepad++, всякие локальные самописные параши и т.п.
Для нет.фреймворка был нугет пакет DllExport, который судя по описанию, позволял это делать. Но для седьмого дотнета реализовать это не получилось, нихрена не работает. А вот на С++ всё работает прекрасно, только я его нихуя не знаю, я не учил его, т.к. верил, что дотнет всемогущ, и на нем можно написать всё что угодно, а оказалось, что нихуя подобного, меня обманули.
Сишарп работает на виртуальной машине, а не компилируется в машинный код, поэтому ограничен в своих возможностях. Серьёзных программ на нём не напишешь.
В пятом дотнете работало, наверное, не обновили пока.
Ещё можно изъёбнуться с декомпиляцией в MSIL и ручным добавлением атрибута экспорта: https://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI
>>29998
А ты можешь нахуй сходить вместе со своей шлюхой-мамашей.
>Сишарп работает на виртуальной машине, а не компилируется в машинный код
https://learn.microsoft.com/ru-ru/windows/uwp/dotnet-native/
Все её методы и свойства можно также пометить как readonly. А можно и не помечать. Что это дает?
Ты Рихтера читал вообще, тупень? Сишарп компилируется в IL-код, который затем выполняется на виртуальной машине CLR. Если на машине нет дотнета, то ты ни одну программу на сишарпе даже не запустишь.
>Если на машине нет дотнета, то ты ни одну программу на сишарпе даже не запустишь.
А вот и нет, тупень.
Приложения .NET можно публиковать в двух разных режимах. Режим влияет на то, как пользователь запускает приложение.
При публикации автономного приложения в состав включается среда выполнения и библиотеки .NET, а также приложение и его зависимости. Пользователи приложения могут запустить его на компьютере, на котором не установлена среда выполнения .NET.
https://learn.microsoft.com/ru-ru/dotnet/core/deploying/
>>29946
https://learn.microsoft.com/ru-ru/cpp/dotnet/native-and-dotnet-interoperability?view=msvc-170
>С++/CLI
Будучи голой дотнет макакой, без знания крестов, системщины, ОС, внутренней структуры бинарников, хер ты что-то сделаешь.
Консольное приложение без всяких GUI и EF будет весить 10-15 Мб.
> Прежде всего хочу выразить благодарность своему Господу и Спасителю Иисусу Христу. Принятие христианства стало самым важным решением в моей жизни! Если вам понадобится дополнительная информация по этой теме, вы можете связаться со мной на моем сайте http://stephencleary.com/.
Протестанты, сер. Единственные искренно верующие веруны остались.
>выполняется на виртуальной машине CLR
>виртуальная машина
Жабамакака, съеби в страхе из треда.
Да, используй AOT компиляцию которую полностью доделали в 7 дотнете. Собираешь код в нативную dll без зависимостей от рантайма, ну а дальше дергаешь.
Это и даёт. Что всё ридонли будет.
> верил, что дотнет всемогущ, и на нем можно написать всё что угодно, а оказалось, что нихуя подобного, меня обманули
Хаха! Смейтесь над ним!
В дотнете есть виртуальная машина. Проблемы?
Почему XAML отказывается видеть такой класс? (пикрил 2)
Если дженерик составляющую убрать, то норм (пикрилы 3, 4)
Как вообще люди используют x:TypeArguments, если класса даже не видно?
>Все её методы и свойства можно также пометить как readonly. Что это дает?
<петросян>2х баф к защите от записи</петросян>
Ну вот есть папка. Можно ее скрыть, а можно скрыть каждый из находящихся внутри файлов. Что это дает? Удобство.
Если у тебя 100% ридонли, то проще структуру пометить. А если 1-9 из 10 ридонли, то помечаешь каждый компонент индивидуально.
var допустимо использовать только если получаемый тип очевиден и служит только лишь для экономии сил, чтобы не писать вот эту срань
myVerySuperLongClass Value = new myVerySuperLongClass Value;
зачем дважды писать одно и тоже, когда правая часть совершенно конкретна? Тут нет никакого "доверия машине", тут всесовершенно четко и очевидно и не нарушает законы строгой типизации.
Другое дело, когда метод возвращает object и хер пойми что там на самом деле внутри. В этом случае присваивать результат var как минимум тупо.
Ясненько ...
Дженерики напрямую нельзя пихать в XAML — нужно создать класс, который наследует дженерик-класс. Тогда совершенно не ясно предназначение пикриелйтед-хуеты.
Так иде показывает итоговый тип. А самому его прописывать, когда он может быть весьма длинным, смысла никакого нет, особенно если речь идёт о linq
>Другое дело, когда метод возвращает object и хер пойми что там на самом деле внутри. В этом случае присваивать результат var как минимум тупо.
Ну вот напишешь ты например PenisType вместо var или object, а у тебя в объекте прилетит VaginaType что делать будешь?
Бывают ситуации когда похуй на тип в конкретном месте. Например из метода возвращается какой-нибудь IEnumerable и что в нем будет лежать тебе похуй. Тебе нужно будет его просто перебрать и отправить дальше.
Если не нравится, то можешь делать наоборот.
Вместо:
var instance = new MyClass();
можно использовать:
MyClass instance = new();
Работает то ли с 9-го, то ли с 10-го шарпа.
все потому что оно все заброшено
есть спека хамл 2009 но ее нельзя использовать в хамл что компилируется в Baml
а без этого x:TypeArguments имеет жесткие ограничения и неюзабелен
в общем старое оно все, увы.
>>31384
>В этом случае присваивать результат var как минимум тупо.
Это верно для редких случаев вида foreach(var item in древняяколлекция) и тому подобных случаев.
И проблема станет видна сразу же ибо просто дальше код не будет работать
типоопасности никакой. просто проблема чтения - кому то это хорошо ибо сокращает буквы, а кто то не может запомнить или понять что там - что особенно видно если читаешь код на гитхабе и хз че реально на выходе у чего то этакого
хз как у вас в шарпе, а у нас в бейсике TryCast для таких целей. Переменная в любом случае будет нужного типа, просто там будет Nothing(Null).
Короч юзать var или наш Dim в контексте необязательной типизации аля джава скрипт, на которую намекает анон — это надо постараться. Это надо быть отборным говноделом и обосраться на всех уровнях.
да нет в шарпе никакой магии. var это "меньше буков" там где компилятор может вывести тип. А если это не древный код со всякими arraylist, то выводит всегда. (ну разве что в Regex еще эта древность есть)
А потому писать везде var - все живы никто не умирает. Ну да, проблема читать не в IDE, но не настолько серьезная - очень много читаю код в браузере и
а) проблема var не пойму что там - 0.1% (по факту у меня не было такого, но допускаю возможность)
б) проблема "блин а в каком неймспейсе этот тип чтобы пойти глянуть его исходник" и начинаешь тупо обыскивать файлы пытаясь по имени угадать - 120%
>быть отборным говноделом и обосраться на всех уровнях.
Если проблемы нет, то ее можно придумать
XAML просто клинит и хер что докажешь ему. То кириллица не поддерживается, хотя после пересоздания контрола вдруг начинает поддерживаться; то не удалось найти закрывающий тэг; то ошибка, мол, свойство уже зарегистрировано.
То проблема уже устранена, а предупреждение остается висеть.
Я не помню, чтобы такое было на NetFramework. Либо студию косоебит от множества проектов в решении, чего я раньше не делал.
Если хочешь масштабируемости, то приходится городить даже в малых проектах.
Ничего там не взломано. Работает пару дней, а потом снова требует активацию. Ждёшь, когда новый кряк выкатят.
в этом и суть. ты всё взломал и ему ничего не досталось.
Дак замаешься учить нововведения. Различий будет столько, что считай как по новой придётся учить.
Братиш, я не зумер с клиповым мышлением. Мне не составит труда изучить новый фреймворк с нуля.
С возрастом тяжелее изучать новое. Я вот тоже раньше за пару дней осваивал новые языки, а сейчас сижу как тупка.
Ну так встань. Пробздись. В том числе ментально.
Нах нужны razor pages?
Возвращает управление вызывающей функции до тех пор пока ожидаемая функция не завершит работу.
т.е. норм?
является сахаром
указывает компилятору где разбивать метод на продолжения.
1
await
2
await
3
Логически эквивалентно цепочке тасков
1.ContinueWith(2).ContinueWith(3)
где, как известно, каждое продолжение планируется на выполнение после окончания предыдущего
однако это оверхед поэтому компилятор переписывает метод в виде специальной структуры где локальные переменные становятся полями структуры, а код метода дробится на куски по await-aм и все это рождает машину состояний, где как в итераторе вызывается MoveNext и выполняется первый кусок кода и по результату вычисляется какой кусок кода будет следующим и так до конца. А там дальше планировщик, образно говоря, будет дергать в каком то потоке(ках типа тредпул) этот MoveNext пока весь код не перемолотит.
то есть await это точка ожидаемого продолжения когда будет выполнен код, который оно ожидает.
Никакого "Возвращает управление вызывающей функции" не происходит, а происходит "планирование продолжения (обычно в тредпуле)" тем самым освобождая текущий поток и если вызывающему методу плевать на ожидание (у него нет await или GetAwaiter().GetResult()), то это воспринимается как "вернул управление"
Да.
Я уже давно, для себя (внутре), все то, что в .net относится к фронтовой части, не считаю частью .net-а. Вся вот эта хуета типа xaml-а в wpf-е, вьюхи в MVC и т.д. и прочее вот это все.
Благословен будь Core который позволил полностью отдать все эти головняки фронтендерам и забыть про них. Я уже давно не вылезал за пределы api и мне охуеть как комфортно. Чего и вам советую.
Петушарпер совсем отупел и кидает хуйню вообще невпопад. К чему ты это высрал?
Первой нет в свободном доступе, а так она получше будет.
Программирование подобно сотворению миров. Неудивительно, что после того, как ты создашь десяток таких, ты сложишь 2+2 и уверуешь в Аллаха.
Пробовал поставить тип UIElementColelction, но депенденси проперти регистрирует уж точно не коллекцию.
текстовый формат всегда проигрывает бинарному хотя бы тем что требует быть текстовым, то есть ограничен диапазоном символов.
https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
Какой костыль. А хуле им ещё делать, если у них 100500 гуёвых либ для крестов и шарпа, но ни одна из них не поддерживает линупс?
Windows forms - устаревшее, не модное, не поддерживает крутые ускорения
Wpf - сложное, требует большого усилия для вката, обязательно нужны какие-то библиотеке mvvm хуеввм по губе
Браузер, электрон подобная хуйня - 100 мб в лучшем случае, пиздец
Что делать, как быть?
мимо php
Если хочешь, чтобы это пригодилось тебе в будущем, то делай ап на .net core + простой фронт в том же ангуляре.
Если делаешь прост для себя лишь бы работало - хуярь в консоли.
Wpf и формсы это говно мамонта, не стоит на это тратить своё время.
>.net core + простой фронт в том же ангуляре.
На нем можно делать небо и аллаха? Или это будет работать онли через браузер?
Бамп вопросом
480x854, 0:46
Кто-нибудь пробовал разворачивать asp.net приложения в portainer ?
Есть ли у кого-то гайд развернуть хотя бы стандартное web api приложение в контейнере ? Я пробовал делать по гайду https://www.youtube.com/watch?v=tBl422FiEBY&t=882s&ab_channel=DevMentors, но у меня порты не пробрасывались и я не могу в локалхосту обратиться к своим методам.
Короч полная ерунда, есть ли нормальный гайд ?
Если нужно тупо вывести органы управления, то да. ВПФ будут только отвлекать, хотя если не юзать мввм всякие, то особо отличий нет.
Формсам ускорения и не нужно. Оно и так быстрее.
Ты хотел сказал про DPI
Ну и в формсах тяжело делать "эээх ляпота"
Впф тяжелее в работе, не совсем нативно выглядит
Но твори что хочу
MVVM это не тяжесть, а спасение от винформсого подхода
Он не усложняет, а облегчает жизнь
Всякие WINUI еще тормознее и в общем то там сразу лучше к мауи
Или на завод
Я десигнер и для меня винформы слишком пососные, но с другой стороны для меня код как для вас винформы — работает да и хрен с ним.
>Но твори что хочу
Не все возможно. Порой такая ебанина, что приходится даже ломать то, что дается из коробки. А чтобы сломать, должен городить такие города из кучи стилей, ты используешь какой-то класс, а он в конкретно твоей ситуации работает не так как нужно.
К примеру фрейм не позволяет биндить ссылку на объект.
А юзер контрол не позволяет добавлять итемы с собственным названием.
Или ты захотел использовать ту самую ВПФ гибкость, а у там дженерики не работают.
И везде есть какие-то нюансы, какие-то исключения из правил, которые ну просто бьют тебе молотком по пальцам.
>Он не усложняет, а облегчает жизнь
И порождает новые ограничения. Иногда появляется радость, что одним взмахом решил одну проблему, но через десять шагов узнаешь, что сам себе создал тупиковую ситуацию. И все сводится к тому, что ты должен идти строго по рельсам, а о какой уникальности может идти речь, когда можно взять те же винформсы?
Иллюзия свободы.
Ты бы не перечислял названия, а называл преимущества. Чет мне подсказывает, что это просто набор стилей для UI.
Ну сколько пишу на впф а ни разу не нужны были дженерики, обжектдаьапровойдеры, routedcommand и бог знает что еще
Ну у меня есть подозрение, что в момент, когда у меня получается жопа, я делаю что-то не так.
Но все же, представь, что есть куча контролов, у каждого есть своя вьюмодель, которая имеет свой собственный уникальный тип, потмоу чт оу каждой вьюмодели всой набор свойств, методов и команд. Мне эту вьюмодель надо как-то получить из контрола. Просто DataContext контрола возвращает Object — это хуйня, я не могу тыкать пальцем в небо и гадать какого же типа там вьюмодель.
Вот, и я решил создать интерфейс со свойством вьюмодели дженерик типа. И вот все эти контролы реализуют данный интерфейс. А теперь представь, что они же являются частью другого контрола и вот тут появляется жопа, потому что объявляются они через xaml.
Как сделать так, чтобы у всех контролов было свойство ViewModel но своего собственного типа, я хз.
у меня такой проблемы не возникает потому что это нужно в code-behind, а там обычно пусто или же в атачед, что тоже редкость.
А также и так понятно обычно что в DataContext - это либо что то крупное как окно или контрол написаный код отображение конкретной вьюмодели, ведь вид не живет изолировано, а отображает вполне известный граф вьюмоделей.
Свои контролы где даже DataContext не юзается тоже мимо.
Юзерконтролы общего назначения тоже не живут в вакууме. Тут возможна пара вариантов
1 принимает что то неведомое, то есть контрол типа PropertyGrid, и включает рефлексию вовсю
2 выдает интерфейс, который обязан реализовать поступающий объект DataContext/Item и тому подобное и делается банальный каст
А тотальный MVVM или его части просто лишают необходимости что то там типы объявлять в хамл.
так я же сам себе запрещаю, а не какому-то челу левому.
> на .net core + простой фронт в том же ангуляре.
А как это работать и выглядеть будет, и сложно ли выучить? Просто как страница в браузере, не имеющая ничего общего с интерфейсом системы?
Чтобы заебаться.
> А как это работать и выглядеть будет,
Медленно и уродливо. Чтобы было медленно и красиво, надо очень долго ебаться.
> и сложно ли выучить?
Очень сложно. Примерно как с нуля учить шарп, дотнет и WPF.
> Просто как страница в браузере, не имеющая ничего общего с интерфейсом системы?
Да.
Поставилась! Только написано, что лицензия на 90 дней. А дальше что? Я должен купить винду?
Но тем не менее это самый лучший вариант для линупс-юзеров.
> А дальше что?
Виртуалбокс с его офсайта. Винда с торрентов. И получаешь бесплатно и навсегда. Но я например вполне разрабатываю свои петы на вс-коде под линуксом. Единственное неудобство - никто до сих пор не сделал (бесплатно) визуальный редактор форм с предпросмотром. Приходится вслепую хуярить хамл, а результат смотреть после dotnet run
Ах да, стек таков: вс-коде + авалония + плагин авалонии + плагины-автодополняторы хамла.
>8. Что нужно знать, чтобы взяли работать?
Реально всё перечисленное освоить с нуля за полгода-год до уровня, когда будешь готов к работе джуном в десктоп-разработке?
А мне нравится джава, но учу сишарп тупо ради работы.
Бля, ну его нахуй тогда... Пойду двигать кнопочки на JS.
>>34817
Очевидно же, что зависит от направления, в котором собираешься работать.
Хочешь попердывать над древним кодом и писать тонны доков в каком-нибудь финтехе за огромную ЗП - учишь джаву. Хочешь делать то же самое, но с привкусом спермы и запахом свежести - учишь дотнет. Хочешь в десктоп - учишь дотнет. Хочешь в игры - учишь дотнет/плюсы. Хочешь мобилки - учишь джаву+котлин или свифт. Хочешь в бэк для стартапов - учишь питон или джс. Хочешь во фронт - учишь джс. Хочешь заработать геморрой и шизу к 30 годам - учишь с++/раст. Хочешь пердолиться в жопу - учишь голанг.
Ну так и линукса в впф нет.
Там изменений немного никогда. Добавляются новые фичи в основном. Хватает почитать что нового learn.microsoft и почти наверняка не воспользоваться этим. Если совсем задрот, то можно покупать себе C# in a Nutshell каждый год.
Живее WTF и MAUI вместе взятых
Жидбрейнсы на нее некоторые продукты перевели
Сапыч, столкнулся с ошибкой при миграции, почему-то ругается что в моем mssql сертификаты паленые, хотя в другом проекте все ок работает и мигрируется, на старом использовал версии EF 6.10 на новом EF 7.0 .Net6, в чем мой косяк
Начал гуглить вопрос, нашел, что фиксить можно только путем отключения шифрования Encrypt, может кто сталкивался с проблемой и есть другие варианты
пик 1 - чет страшное
пик 2 - добавим страха в чтении используя однобуквенные названия переменных.
пик 3 - хз, наверное тоже страшна раз представлен
итого
>Что можно сделать с double, чтобы цикл работал нормально?
для начала бы понять что тебе не нравится.
вообще про точность чисел с плавающей точкой все знают, но раз тебе нужен именно double, то хоть бы в общих чертах понять о чем ты толкуешь.
пременная x double в цикле for увеличивается на 0,07 с каждой итерацией от 0,1 до 0,8. из-за точности double на 3 итерации ломается цикл т.к. итоговое число будет >0.8. Как это обойти.
увеличивать диапазон до 0,81 уже пробывал, работает. Но есть ли нормальное решение этой проблемы?
Спасибо. Буду округлять. Может, decimal попробую.
for (double x = 0; x <= b; x = x + a <= b ? x + a : b)
Но вообще лучше такой инкремент выносить в отдельную функцию или экстеншен.
И называй переменные нормально, нехуй байтики экономить.
У вас за лишнюю собку бьют что ли? Даже если она увеличивает читаемость
....Помогает писать нечитаемый код
пиздос
Они у неё есть. Просто правильно настрой стили для масштабирования. Я читал статью об этом у них в доках, но адрес сейчас могу не нейти.
Вот ишью из гугла, но это не то что я видел ранее, и возможно не так проблема с размазыванием шрифтов https://stackoverflow.com/questions/63448372/avalonia-ui-scaling-issues
Но почитай, вдруг оно.
И еще это решение похоже на костыль.
Юзай Eto.Forms!
Там можно закодить форму на шарпе, да декларативненько (через инициализаторы), да с кодбехайндом на шарпе же (через partial)!
Я сейчас так пишу пет-проекты на винформах с инициализаторами, дизайнером не пользуюсь. Eto.Forms тыкал, нормальная тема, но чуток не хватает документации.
> на винформах с инициализаторами, дизайнером не пользуюсь
И как там? Много костылей приходится преодолевать, чтобы сделать грамотно-адаптивный интерфейс? Или ты не паришься и блокируешь изменение размера окон? А если размер окон заблокирован и интерфейс статичный, то что за доёб к ресайзу авалонии выше?
Ах да, это ж разные аноны. Ну-ну.
> И как там? Много костылей приходится преодолевать, чтобы сделать грамотно-адаптивный интерфейс?
Не много, я один раз написал обёртки с нужными параметрами и везде их использую.
> Или ты не паришься и блокируешь изменение размера окон? А если размер окон заблокирован и интерфейс статичный, то что за доёб к ресайзу авалонии выше?
Хуй знает, что там в авалонии, никогда её не видел. Если там есть проблемы, видимо, есть на то какие-то причины типа кроссплатформенности.
Значит, goвноеды надеятся, что шарписты умрут от кринжовых шуток.
Илита использует винФормсы на стероидах - Телерик. Быдло не знает.
Ссу на блейзор/wpf/xaml и другую петушню. За .NET разработчиков, замеченных в использовании данных инструментов, не считаю, это прокаженные.
Ну не сказал бы, некоторые бизнес-хуйни автоматизировать можно только через десктоп, обычно эта хуйня правда на заводе.
Будем и дальше писать фронт на винформах итт. И что ты сделаешь?
>никаких окон, кроме окна браузера.
Как ты заебал вонять. Тебе сколько раз хуем по голове стучали? Ебаный дегрод.
Ты кроме магазинчиков и порнсайтов поди ничего в жизни не видел. Мервы у него десктопные приложения, охуеть. Любой профессиональный софт на десктопе. ЛЮБОЙ.
>а если вы почему-то с ними работаете
У нас в конторе недавно обновление завезли - переехали все на 4.8 довольные.
Сейчас времена не те, период не тот, чтобы куда-то переходить. А у нас можно пересидеть тяжелые времена. Наш легаси-продукт нужно будет поддерживать и разрабатывать даже в случае ядерной войны. Если что, я не из бСССР.
Держи в курсе
нет нету. они рисуют на скиашарпе и на выхлопе жопа. смотри пик - там последний это нативный размер текста без указания размера. он такой огромный и проблема видна меньше, но все равно видна.
А так - сравни с заголовком окна.
>>36353
>десктопные приложения - они мертвы
ну вот и проходи мимо в свои ангулары и не мешай зарабатывать денежку.
>переехали все на 4.8 довольные.
что мешает переехать на 7?
у нас не переезжали на дотнет5 из за wpf некоторых тонкостей пдфных, но на 6 изи.
Посмотри историю появления шарпа и поймёшь. Это не просто совпадение.
https://github.com/AvaloniaUI/Avalonia/commit/5e128bc73149c7370640cf7831d227794a0710f9
ну будем посмотреть. ничего ж не компилится даже для посмотреть
но оперативность решения в виде ГОДЫ ЖДАТЬ не радует
Заебала пидорасить код и вставлять не в том месте.
2. Как дать по щам студии, чтобы она не двигала мои вкладки? Дело даже не в том: слева или справа создавать новую вкладку. Речь идет о шурудении уже открытых вкладок. Кто давал ей право это делать? Прочему пятая по счету вкладка перемещается на позицию второй? Проделки домового?
В джаве же всё сделано просто и со вкусом: объявил переменную прописал нужные тебе методы: getName(), setName(), где Name - имя переменной. Многие ИДЕ сами их генерируют, так что много кода писать не потребуется. Само собой и нет двойного расхода памяти, потому что методы его не тратят.
>Многие ИДЕ сами их генерируют, так что много кода писать не потребуется
но на выходе все равно получается много кода, а разница...
>объявил переменную прописал нужные тебе методы: getName(), setName(), где Name - имя переменной.
ровно ТАКОЕ ЖЕ сгенерит тебе компилятор вместо { get; set }
>т.е. получается двойной расход памяти: одно на переменную, второй на свойство.
нет не получается. тут с жавой 1 в 1 - разница лишь в том КТО генерит методы getName(), setName() - редактор или компилятор (на то он и сахар)
С автосвойствами дополнительные приватные переменные нахуй не нужны. Они нужны только пидорам, пишущих в свойствах логику
А что в сишарпе? Просто какой-то зоопарк модификаторов доступа. И такие и сякие. И голову можно сломать, чтобы понять где доступен этот класс, а где нет. И наверняка в будущем они ещё навалят модификаторов побольше, чтобы язык окончательно привратился в помойку. Уже даже опытные программисты, которые начинали с ранних версий, с ужасом смотрят на захламление синтаксиса.
Мне это почему-то напоминает права доступа к файлам в юниксах/линуксах и винде. Если у первых простой битовый массив, то в винде это какой-то ад: всякие изменить, но не удалить, изменить, но удалить, запустить, но не читать и прочий бред.
>Они нужны только пидорам, пишущих в свойствах логику
без логики в свойствах само понятие свойство нахер никому и не нужно было бы. Сам функционал "свойство" и рожден именно для написания логики
Ваш КЭП
>Если в джаве есть 4 простых модификатора
а в линуксе есть права доступа вида rwx, которые
>в простую табличку и ты всегда чётко понимаешь
беда только в том, что если бы их хватало, то не родились бы сверху всякие ACL и другие средства
И лучше иметь больше средств контроля доступа, чем меньше
А я говорю, что под класс Foo будет выделяться не 4 байта, а 8 байт памяти из-за свойства. Потому, что микрософты не предусмотрели возможность манипулирования скрытой переменной Bar и приходится заводить новую _bar.
А ты представь, что скрытой переменной нет.
И ведь микрософтам ещё хватает наглости писать об этом с гордостью, что они сделали какой-то полезный вклад в развитие языка.
Рихтер наверно после этого, если и собирался писать новую книгу, то теперь точно не напишет, потому что шарп свернул не туда.
Да и вообще после 5 версии шарпа язык пошёл под откос. Его и дальше будут накачивать бредовыми изменениями. Скоро он превратится в Perl с его обилием сложночитаемых закорючек.
а я говорю что разницы между java с ее сеттерами на уровне кода и шарпом с его сеттерами на уровне скомпиленного кода - просто нет
и твой пик НИЧЕМ не отличается от моего ни по памяти ни по реализации. Это ОДНО И ТО ЖЕ.
>>36681
выключи фичу и всего делов. это ж не котлин где это на уровне компилятора. тут это просто предупреждения
> потому что шарп свернул не туда.
шарп свернул как раз туда. разве что поздно это начал. гугли "Ошибка на миллиард долларов"
.
не туда он свернул во многом при рождении
- нулл безопасность
- нет замороженных типов нормальных
- нет val
- неудачная реализация событий
- похерили контрактное программирование
- жирный обосрамс с IReadOnlyList
- new new new
- имя конструктора должно иметь имя класса
- ConfigureAwait(true).
- нет инлайн методов
и другое "бррр аж трисет"
>бизнес
>на заводе
Сам то понял, что сказал? Твоим главным бизнес-заказчиком на заводе будет тётя Срака, которой нужно вести учет чушек на складе.
>Любой профессиональный софт на десктопе
Для разработки профессионального софта нужно обладать нужными знаниями. Вкатунам туда вход закрыт.
1. А с каких хренов она должна знать в каком месте этот метод стоять должен. Да и не похуй ли по большому счету.
2. Вкладки можно фиксировать.
На пике.
Первая - зафиксирована, всегда будет открыта и находится по отношению к другим зафиксированным вкладкам там где она размещена.
Вторая открыта и не зафиксирована, всегда будет находится после зафиксированных вкладок и может менять позицию туда-сюда.
Третья временно открытая. Пока ты с ней работаешь, но студия закроет ее при первой возможности (например при добавлении новых вкладок)
>Просто какой-то зоопарк модификаторов доступа.
Ужас какой, целых 6 штук. И то базовых всего 4 (как в джаве, сюрприз), а остальные их комбинации. Это ж пиздец как сложно запомнить-то. Может программирование это не твое, если у тебя с памятью такие проблемы.
Вот тебе простая шпаргалка, может поможет.
>1. А с каких хренов она должна знать в каком месте этот метод стоять должен. Да и не похуй ли по большому счету.
Немного бесит. Вообще непонятен алгоритм вставки.
Я прост любитель все разбивать на регионы, и у меня нет такого, что сначала идет список приватных свойств, потом публичных, потом методов, потом событий.
А студия этому противится.
Или к примеру у меня приватное свойство находится рядом с его публичной расширенной версией, а студия пытается приватное вставить после приватного и нарушает целостность блока.
2. Вкладки можно фиксировать.
Это да, но задолбаешься их фиксировать и откреплять. Тут я тоже не понимаю логики зачем вкладки вообще перемещать нужно.
>Я прост любитель все разбивать на регионы, и у меня нет такого, что сначала идет список приватных свойств, потом публичных, потом методов, потом событий.
это не студия издевается над тобой, это ты издеваешсья над студией.
>Тут я тоже не понимаю логики зачем вкладки вообще перемещать нужно.
Иногда бывает когда над слишком говнокодистым проектом работаешь приходится открывать пучок вкладок и туда сюда их тасовать, чтобы хоть как-то это в голове уместить.
А вообще советую для студии экстеншен Workspace Manager, позволяет сохранять наборы вкладок и потом быстро их загружать. Очень спасает на работе, когда приходится переключаться между разными тасками туда-сюда.
Самый оптимальный стиль в джаве. Примитивные (значимые) типы с маленькой буквы, а все ссылочные - с большой. Методы с маленькой.
>Я прост любитель все разбивать на регионы
Я тоже раньше любил кучу регионов плодить. Сейчас отвык от этого. Наверное научился писать код так, чтобы он был сразу понятен. Максимум, что сейчас делаю, блок конструкторов (если их несколько) или приватных методов в регион оборачиваю.
Те же яйца только в профиль. Тот же CamelCase, только кое-где местами upper с lower поменяли.
А вот скобки в джаве по уебански расставляются.
Вот в джаве смотришь на тип String и сразу понимаешь, что это ссылочный тип. А какой тип string в сишарпе?
Ссылочный, но со своими особенностями.
А потом ещё надо выучить кучу модификаторов для аргументов методов. Всякие out, ref, in, params. Многие даже опытные сишарперы их не знают, потому что в каждой новой версии накидывают ещё. И ладно бы был от них какой-то прок, дак это просто сахар ради сахара. Они абсолютно бесполезны. К тому же, касательно in ещё и сами имена подобраны тупо. Гораздо логичнее было бы использовать const, что отражало бы смысл модификатора, но нет, будет in.
>out, ref, in,
Безопасная работа с памятью
> params.
Передача неопределенного количества аргументов без создания массива.
А вот в джаве вместо params используется более изящное решение - троеточие. Оно не занимает лишние ключевое слово и выглядит лучше в коде.
Вообще, джава очень экономно относится к ключевым словам и повторно используется многие из них в разных контекстах: final, for, try. В шарпе же постоянно вводят новые ключевые слова и авторам этих изменений наплевать, что программисты уже могли использовать их для написания программ в ранних версиях. Об обратной совместимости они не задумываются.
К тому же названия в шарпе выбираются крайне неудачно. Чего стоит Enumerator, который больше ассоциируется с перечислениями Enum, а не с итераторами.
Потому что gethashcode не имеет отношения к хэшу самого файла.
Хорошая тема, правда глючная слегка. Надо удалять .vs, чтобы завелось.
И сбивает с толку загрузка воркспейса. Сначала подумал, что опять не работает т.к. предполагал, что переключение будет автоматически по выбору итема в выпадающем списке. А кнопку LoadWorkspace я посчитал за выбор файла с пресетами.
С другой стороны, можно отредактировать пресет не переключаясь на него — панель компактнее.
Ладно, ладно. Мы уже поняли, что для джавистов разобраться в четырех терминах непосильная задача.
>Хорошая тема, правда глючная слегка. Надо удалять .vs, чтобы завелось
Я х.з. у меня без этого работает. Там просто в каталоге с солюшеном создается файл в котором пресеты закладок хранятся и все. Его можно по желанию в .gitignore занести, на сам проект он никак не влияет.
>Самый оптимальный стиль в джаве.
Знаете почему вы будете спорить бесконечно над тем, что оптимальнее? Потому что ваша хуйня решает только 5% проблем.
Есть ворох сущностей, которые тоже надо бы как-то обозначить, но у вас есть только UpCase да нижний прочерк.
Раньше читал про правило, что массивы нужно обозначать с большой буквы, а все остальные с малой. Потом узнал, что надо все, что объявляется локально в методе, писать с малой, а все что снаружи — с большой. Потом узнал, что все что приватное в классе с малой, а все что публичное - с большой.
А щас наблюдаю еще один шизопостулат, который (будем объективны) не решает ничего — все равно что пердежом двигать Эверест. Эти обзначения играли роль во времена, когда твой редактор кода был скудным по функционалу. Тогда и функции ПИСАЛИ_КАПСОМ, чтобы хоть как-то отличить. Сейчас студия тебе и всё раскрасит, и подпишет, и даже иконку подставит. Не занимайтесь хуйней.
Единственное, что хуево в шарпе, это визуально одинаковая реализация интерфейса и наследование от класса. Даже конвертер с C# в VB косоебит на этом моменте. А вот наоборот конвертируется замечательно, потому что реализация интерфейсов помечаются как Implements, а наследование как Inherits.
Да и вообще C# очень хуев для автоматической конвертации (что примечательно). Например конвертер не может отличить подписку на событие от простого инкремента, в то время как в бейсике для событий есть ключевые слова AddHandler и RemoveHandler.
В C# одно сочетание символов может содержать миллион контекстов.
че по сотыгам на десктопе? Думаю, переходить ли в веб или не
Что как бы намекает, что микрописечка не такая уж и микро и за каким-то хером лезет в другие части проекта. Вот аналогичная проблема
https://developercommunity.visualstudio.com/t/workspace-is-not-saved-anymore/251422
Вот поэтому я не доверяю всем этим плагинам в свободном доступе.
>программисты уже могли использовать их для написания программ в ранних версиях
И студия автоматически добавит к ним символ @, чтобы отличить их от ключевого слова.
Озвученной проблемы нет.
Я делаю примерно так же.
Сеньеры-помидоры - рофлят с меня, делают 1 класс 5к строк и идут смотреть ютуб, пока я как дебил - хуйней страдаю, еще и пишу тесты.
Вот с тестов - горит. Единственный хуй что пишу их((( Типа блядь. Повторяю умные слова про тесты, тестировщики говорят - вот, этот джун дело говорит, заебало нас ваши программулины отлаживать, тестирование всего кроме моего говна - длится по полгода в том числе из-за отсутствия тестов. Нет, сеньеры-помидоры говорят: идите нахуй, не будем тесты писать, а тестировщики за то деньги и получают, хули мы будем тесты писать, пусть они баги ищут.
Короче. Да. Из-за этого хреновая картина: Я по полгода сижу - и жду пока код сеньеров оттестируют, потому что тестов нет, нужно все проверить руками, даже мелочи. А я - хуйней страдаю. А я - кодить хочу, а не хуйней страдать(((
Надо просто на деньги сеньоров набрать еще тестировщиков, раз работа простаивает. Тебе надо применить паттерн Krysa
У нас тестировщики получают так же как сеньеры. Т.е. заменяем одного сеньера - тестировщиком.
Кто разрабатывать будет?
Надо тесты внедрять. Я реально ж вижу, что меньше проблем потом в ходе тестирования. По сути все сводится к тому, чтобы проверить, что то что реализовал - это действительно то что просили.
Вполне возможно. Я просто никогда не сохраняю .vs под контроль версий. Во вторых я никогда не юзаю контроль версий через студию, только непосредственно через сам git. Наверное поэтому и не сталкивался.
Это действительно класс Grid, или какая-то ересь? Как оно связывается с дизайнером и в каком месте?
и поэтому на мобилах (то есть где нет кровавого энтерпрайза) котлин (с его перегруженностью сложностью, что даже шарп на его фоне бледно выглядит) вовсю вытесняет жаву
Его гугл насильно внедряет, а где свободный выбор языка, там выбирают джаву.
это наследник класса Grid
реальное имя класса в x:Class
и это xaml, а дизайнер умеет в xaml отображать.
На конференции для разработчиков I/O 2019 Google объявила, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений под Android — новые API и библиотеки Jetpack будут публиковаться сначала на Kotlin.
https://vc.ru/dev/66728-google-obyavila-kotlin-prioritetnym-yazykom-programmirovaniya-dlya-razrabotki-android-prilozheniy
А где происходит эта связка? В проекте тупо лежат два файла, единственная связь которых — одинаковое название класса. Что будет если удалить один из файлов?
Помню, что в винформс был какой-то связующий третий файл.
ок. принимается. упоротый жавист, который привык ковыряться в говне (по твоей ссылке там пример сравнения), может считать попытки остального мира свалить с говна как насилие на бедным жавистом.
>будут публиковаться сначала на Kotlin.
ну так то да. из котлина можно вызывать жава код, а вот из УБОГОЙ жавы вызывать котлин хз как.
Впрочем я все равно останусь при своем мнении что выбирающие котлин выбирают его за его фичи, а не потому что гугл решил. Потому как сам выбрал по причинам "жава говно убогое (особенно на андроид там вообще жопашный), а котлин ня"
ну вот ты создаешь юзер контрол MyUserControl в студии
и у тебя 2 файла - MyUserControl.xaml и MyUserControl.xaml.cs
То, что они связываются в дереве файлов проекта - просто фича студии по конвенции (и даже какие то расширения есть)
Посмотри на сами файлы. По факту эти 2 файла описывают один partial класс разным языком. (смотри пик)
xaml не является чистым языком разметки как хтмл.
Он описывает код декларативно.
Он описывает тот же класс просто другими средствами
(правда это компилится не в шарп код(IL), а в baml не потому что не может, а по другим причинам)
Но если бы компилился в код, то было бы примерно то, что генерит винформс дизайнер.
Если ты в хамле UserControl поменяешь на Grid то получишь ошибку
Error (active)CS0263 Partial declarations of 'MyUserControl' must not specify different base classes
Если ты удалишь один из файлов, то будет тот же эффект что с обычным partial файлом - если в нем осталось что-то из удаленной части, то не скомпилит. Например если ты удалишь хамл файл, то в xaml.cs будет ругаться на недоступный InitializeComponent();, который был как раз в хамловой части описания класса.
>xaml не является чистым языком разметки как хтмл.
>Он описывает код декларативно.
Я понял.
>Если ты в хамле UserControl поменяешь на Grid то получишь ошибку
>Error (active)CS0263 Partial declarations of 'MyUserControl' must not specify different base classes
А, ну у меня бейсик, и у меня по дефолту не показывает partial и базовый класс. Это наверно из-за настроек, как автоскрытие неймспейсов. Соответственно, при смене класса автоматом видать меняется базовый класс во втором файле. У меня ошибки не возникает.
Я правильно понимаю, что гугл насильно заставил 63% разработчиков на котлине любить его? - https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages
Джава там вообще внизу списка
В 2к22м все еще находятся долбоебы, верящие в тесты производительности и опросы.
А зачем SO подкручивать опросы?
хотя да. это co
>Его гугл насильно внедряет, а где свободный выбор языка, там выбирают джаву.
Вот сколько не видел джавистов, подавляющее большинство прямо высказывает, что выбрало бы котлин, но приходится жрать джаву, которая их достала.
>пик
Ох как же меня бесят неймспейсы в xaml, я наверное в основном из-за этой хуйни и бросил когда-то пытаться нормально его освоить.
Не знаю как раньше, а сейчас они дописываются автоматом, я даже сходу сам не импортирую ни одного неймспейса.
Намного хуже работа со стилями.
В каком смысле рисовать звук?
Если ты про графику, то она имеет несколько категорий: растровая и векторная. С векторной проще всего в WPF — проще, чем в винформсах и можно даже рисовать по прозрачному окну и без проблем применять трансформации масштабирования, поворота, смещения. Canvas для этого идеально подходит.
В винформсах была ебатория с тем, что если тебе надо изменить фигуру, то нужно сперва ее стереть, чтобы нарисовать новую. В WPF все на автомате.
Собсно сабж: https://metanit.com/sharp/wpf/17.3.php
Для общего ознакомления возможностей WPF https://learn.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/?view=netframeworkdesktop-4.8
Если ты про растровую графику, то увы, попиксельно можно было рисовать только в старых библиотеках для винформс. Но спрайтами — это пожалуйста, накидываешь текстурку на какой нибудь Rectangle и трансформируешь как тебе хочется.
Выводить звук без запуска проигрывателя тоже можно из коробки, но нужен формат WAV, никаких mp3 и прочей ебулды. Мб с доп либами можно и что-то еще. Гугли System.Media.SoundPlayer
Ну в общем, есть книжка "Седжвик Р., Уэйн К. - Computer Science. Основы программирования на Java, ООП, алгоритмы и структуры данных (Классика computer science)", но там все примеры на джаве. Хотелось бы их применить на сишарпе, но там очень много задач на рисование и даже на вывод звука посредством колебаний с определенной частотой. Буквально читают wav-файлы и генерируют звук средствами джава.
Ну тогда, братишка, тебе нужно разбираться самому и гуглить конкретные шаги из книги. Ну есть там вские генерации меандра (ака Square Wave), типа пищалки, которые записываются в WAV, а потом воспроизводятся.
https://stackoverflow.com/questions/203890/creating-sine-or-square-wave-in-c-sharp
Хер знает что тебе нужно и что ты там задумал. Если какое нибудь MIDI, то это уже отдельный вопрос, но думаю тоже есть либы.
Получается, что мать твоя — шлюха. Я догадывался по размытой формулировке вопроса, что это тупой наброс.
Из-за таких мудаков, как ты, другие страдают, потому что вместо ответа на вопрос их сходу кроют хуями.
Ты виноват в том, что пытаешься набросить говно на вентилятор, а я виноват в том, что продолжаю кормить.
Когда я сталкиваюсь с тем, что джава снова оказывается лучше сишарпа, то испытываю тоже бурю эмоций. Сразу вспоминаю флешбеки тех моментов, когда решил начать изучение сишарпа. Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву!
Не удивительно, что многие сталкиваются с теми же проблемами при изучении сишарпа и лишние напоминание об этом вызывает у них гнев в виде оскорбительных сообщений.
>Когда я сталкиваюсь с тем, что джава снова оказывается лучше сишарпа
Я больше поверю в то, что ты прикидываешься глупым джавистом, чтобы дискредитировать Джаву. Просто я не могу поверить, что есть настолько глупые люди. Я даже не могу поверить в жирный троллинг от джависта, ибо данный подход подразумевает некий репутационный демадж Джавы как языка, пользователи которого используют фразу "рисовать музыку".
Даже человек, который ни разу не сталкивался с задачей генерации звуков, люто проиграет с тебя, ну и сделает соответствующие выводы о качестве поданной информации в книге Седжвика Р.
Бля, хочешь затроллить меня? Ну возьми и исследуй тему создания музыки на шарпе, сравни это с методами создания на джаве. Покажи пруфы, что сделать можно, что нельзя. Я с удовольствием почитаю.
А пока что ты для меня кажешься каким-то некомпетентным клоуном-ретардом. Только вдумайся: ты отсутствие желания анона вывалить тебе готовый код, хочешь преподнести как отсутствие функционала в шарпе. И кто ты после этого?
640x640, 0:17
>И кто ты после этого?
Это тупо байт, чтобы ты в порыве чувств защиты чести и достоинства шарпа, метнулся искать необходимую информацию и выложил всё готовое. Понятно, что хуесос привыкший к готовой подборочке задач из книги неспособен на поиск необходимой информации. Я больше чем уверен, что и генерация звуков ему как таковая не нужна, а просто она была в книге.
Ты видимо и читать не умеешь. Я писал: рисовать и выводить звук. Это два разных действия. Ты что ли не рисовал никогда в пеинте? Не пользовался музыкальными проигрывателями?
Тем не менее в джаве это всё легко делается. Даже искать ничего не надо. Написал пару строчек и работает.
Как это в шарпе - не знаю. Скорей всего шарп так не умеет. Либо это какая-нибудь хитромудрая коyфигурация в xaml, что имеет мало общего с простотой рисования в джаве.
>Скорей всего шарп так не умеет.
Ты больной. Зачем ты с такими предубеждениями лезешь в шарп? Ты посчитал, что желаемое невозможно до того, как вообще поискал инфу.
Даже после того, как тебе дали ссылку на референсы, ты это проигнорировал и начал поливать говном.
А где на скрине задается закругление концов?
В WPF можно зать форму окончания контура. Типа CapStart и CapEnd, там можно выбрать закругление, прямой конец и прямой конец с прибавлением на толщину контура.
И второй вопрос, а это хуйня работает как отдельный объект? Или оно просто рисует пиксели? Можно точку и линию повернуть на 45 градусов и отмасштабировать в 0,5 раз относительно центра точки?
В джаве нихуя так не делается. В стандартной библиотеке нет класса StdDraw, ты его взял хуй пойим где и подключил к своему проекту. Напиши саои пару строчек без сторонних библиотек и попробуй тогда выебнуться.
Это библиотека для книги, но в основе у неё AWT и Swing. Её можно одинаково применять на любой ОС, потому что они полностью кроссплатформенны, в отличии от фейковой кроссплатформенности дотнет кора.
Всё работает. Можно даже сделать jar-ник и запустить в линуксе и макоси и всё будет работать без перекомпиляции.
Что, уже не пара строчек? А теперь напиши то же самое на винформах, получится примерно столько же. Вскукарек про кроссплатформенность хуй знает к чему тут вообще, в изначальной постановке вопроса про него ничего не было, так что не надо тут переобуваться. Кому нужна кроссплатформа - тот возьмёт eto.forms или авалонию.
>А теперь напиши то же самое на винформах, получится примерно столько же.
Что на формсах, что на WPF получается ровно столько же (т.е. первый варинат анона с библиотекой). Ну может на формсах чуточку длиннее, но в WPF гарантирую ровно столько же кода.
Разница лишь в том, что в WPF нарисованная кривая это редактируемый объект с доступом к толщине, заливке, координатам точек. Можно к кривой применить матрицу трансформаций, ну и прочие радости жизни, типа антиалиазинга, чтобы не было пораши по типу пикрил, или наоборот SnapToPixels, чтобы не было "мыльных" контуров.
>>38220
>Я не умею на винформах
И не надо. Там графику рисовать тупо. Единственное, что там годное — это возможность нарисовать сглаженную кривую по точкам. Т.е. речь идет не о кривых безье, когда указывается 4 точки (это есть и там и там), а когда указывается только две и между ними идет усредненный переход. Так называемые Catmull-Rom кривые.
https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline
Возможно в WPF есть и такое, но я не нашел.
Для работы со звуком есть NAudio. https://github.com/naudio/NAudio
Как по мне, так это настоящая Silver bullet для работы со звуком. Позволяет не ебаться с различными API.
>Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву!
Так, а что тебе мешает сейчас свичнуться на джаву и съебать нахуй из треда ?
>Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву!
Так, а что тебе мешает сейчас свичнуться на джаву и съебать нахуй из треда ?
кстати вот пример для понимания. что хамл - язык описания кода в декларативном виде, а не описание разметки. Там и хамл и эквивалентный код.
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/how-to-create-a-composite-shape
Ну да, просто по первой как-то не осознаешь это, особенно когда переходишь с винформсов.
>Джава учится дольше, чем сишарп.
Воу-воу. Притормози. Ты тут всю дорогу внушаешь, что джава лучше и там все проще. Что не надо запоминать кучу модификаторов и т.д. И тут хуяк и все наоборот?
К чему тогда твои стенания на тему того какая джава пиздатая если ты ее даже осилить не можешь?
>Само собой речь не про язык, а про фреймворки.
Гнилой аргумент. Если ты нормально знаешь язык, то вопрос вката в любой фреймворк дело максимум месяца, а часто вообще неделя-две.
Но как же ты собрался выучить быстро сишарп если каждый год злые майкрософт меняют стек до неузнаваемости? У тебя же учебные примеры не скомпилируются!
Фреймворки в джаве отстойные. Там всякие xml-конфигурация, тонны аннотаций. В итоге пишешь не на джаве, а на всё сподряд. Есть даже специальный язык Спринга SpEL.
Если бы всё училось за месяц, то я бы уже выучил и начал ходить по собесам. Скорей наоборот, язык учишь за месяц, а всё остальное годами.
>>38447
Я нашёл актуальный курс на торрентах по текущей версии. Надеюсь успеть до дотнета 8.
>Скорей наоборот, язык учишь за месяц,
До-о-о. Чел, ты даже модификаторы доступа запомнить не в состоянии. Какое тебе там "язык за месяц".
Удивительно, если хоть в обном языке такое есть. Интерфейсы придумали для ООП, а статик классы - костыль для добавления процедурщины в язык, чтобы не добавлять глобальные функции. Видел интерфейсы в сишке? Вот то-то и оно, нет интерфейсов в процедурщине и быть не может.
в котлине есть ибо там статик это синглтон объект приатаченный к классу и это реально удобно - можно и интерфейс и расширение сделать не только для инстансов, а еще действуют скоупы видимости этих расширений.
Всего этого в шарпе нельзя и приходится извращаться.
Нет - код то писать можно рабочий, но вот сделать нормально - увы
Чел, ну как бы статик и синглтон это слегка разные вещи, каждая со своими целями. Ты пытаешься логику одного прицепить на логику другого, а когда не получается выдаешь "плохо сделано, тупо".
> там статик это синглтон объект приатаченный к классу
То есть никакой это не статик, а тупо синглтон, обычный объект со всеми вытекающими. Под капотом для JVM создаётся обычный класс, и, понятное дело, можно реализовывать какие угодно интерфейсы. Там и функции есть, которые тоже сделаны через неявные классы. Кому-то не нравится, что в шарпе нет подобного сахара, а кому-то не нравится наличие такой возможности в петухотлине, в котором делали всё лишь бы не как в жабе.
>>38689
снаружи выглядит одинаково
MyClass.MyMethod()
и потому подобные вещи я называю "статические методы" то есть "методы которые можно вызвать у класса, а не у экземпляра"
И реально пофиг что там под капотом. Сахар для того и придуман чтобы выглядело просто, а под капотом хоть новую вселенную создавай.
> и потому подобные вещи я называю "статические методы"
> И реально пофиг что там под капотом
Тебе с таким мышлением дорога в 1С и PHP. Хочешь возиться с котлином или шарпом - используй общепринятую терминологию, иначе хуй кто тебя поймёт.
на статики шарпа я сказал статики.
А статики котлина - вот пусть котлинисты в меня тапками и кидают, но я в шарпотреде сижу.
>Тебе с таким мышлением дорога в 1С и PHP.
с чего вдруг мне прикасаться к этому дерьму. Тут нет логики.
Ведь сахар и DSL средствами языка и нужны для того чтобы скрыть реализацию или сложность заменив ее на удобство
котлин - язык с упором "творите свое DSL и наслаждайтесь"
шарп, увы - мы тут делали свою жаву, потому немного одумались, но поздно и мало - так что "жри чо дали"
это просто факт. это может не нравится шарпистам, но это факт.
не каждый шарпохейтер суть жавист.
Я хейтю шарп, но не потому что я его плохо знаю, а как раз наоборот.
А чё ещё делать, TreeView обсуждать?
ну ну. я хейтю из за синтаксиса шарпа, хоть и пишу на нем с его рождения.
Все познается в сравнении. Я считал синтаксис шарпа богатым, но волею судеб изучив котлин понял что шарп очень жадный на выразительность.
И жалкие крохи выразительности вводятся со скрипом.
Жутко стремаюсь из-за ощущения что самозванец, хотя в то же время такой же как и я челик с ютуба просто порешав литкодовские задачки в гугл устроился.
Что подучить? Что в гитхаб закинуть (инб4: его не чекают; литкод задачки) ? Может вам давали полайвкодить, что были за задачи?
Я, собственно, так в шарп и вкатился.
В джаве это таблица 4 на 4 и легко учится. Это в сишарпе миллион модификаторов и каждый год новых насыпают. Джава учится за месяц, а сахар сишарпа не учится вообще за какой-либо вменяемый срок.
Понятно, что на собесе может попасться душнила, который завалит сахаром. Поэтому придётся искать вакансии без таких душнил, а с нормальными челиками.
>сахар сишарпа не учится вообще за какой-либо вменяемый срок.
Вот и ответ почему жависты из ентерпрайза не переходят на котлин.
Мозг у жавистов мааааленький, в буфер все не помещается
>В джаве это таблица 4 на 4 и легко учится.
А в шарпе это табличка 6 на 5, которая тоже легко учится. Выше в треде ее уже кидали.
Так и запишем, что это предел познаваемости джава-дебила.
>каждый год новых насыпают.
Ну пиздеть, то не надо. Набор этих модификаторов уже 5 лет не меняется. Единственный модификатор который добавили в C#11 - это file, но про него можно тупо забыть, т.к. он для кодогенераторов предназначен.
>а сахар сишарпа не учится вообще за какой-либо вменяемый срок.
Весь сахар си-шарпа спокойно умещается в книжке на 250 страниц карманного формата.
>Понятно, что на собесе может попасться душнила, который завалит сахаром.
Это вообще редкость. Спрашивают только за какой-нибудь фундаментальный сахар вроде using-ов или async/await.
Это их проблема, не остальных. Не можешь себе позволить сахар - не ной на остальных, что они сахаром пользуются.
Спрашиваю на собесе (всё по тайпскрипту):
1. Difference between let, const and var at TS
2. What is anonymous function
3. Ways to implement lazy loading
С вопросов выше можно понять знает ли кандидат основы (вопрос 1), а может шарит глубже (вопрос 2), можно понять как мыслит кандидат, вариантов имплементации lazy loading сотни, интересно какой выберет (почему именно этот, чем он лучше/хуже).
И к этому тестовое задание на 1-2 часа работы (72 часа чтобы его выслать), чтобы кандидат спокойно в своём темпе его сделал. Задание:
- есть готовый шаблон проекта, созданы пустые компоненты, написаны css
- есть готовое rest api (get, delete, put)
- get возвращает >10000 объектов, которые нужно поместить в таблицу, которую нужно фильтровать и сортировать на фронте (в get есть параметр paging, но я об этом не говорю, вся инфа в сваггере)
- нужен поиск по каждому полю объекта (id, name, amount, price)
- каждый из объектов можно удалить, таблица должна обновиться после удаления
- можно добавить новый объект, таблица должна обновиться после добавления
Это собес для 3+ года опыта работы, ставка 25$ + VAT
>Я создаю отдельную бд для каждого юнит теста
Ахуеть... in-memory-database еще не проходили на курсах??
Это точно на 3+ лет опыта? У меня 1.5 года опыта на дотнете, я и то могу эту парашу сделать, лол.
К слову опыта с js нет почти, но это не отрицает факта того, что задача слишком простая.
>>39015
Да. Тут 3+, потому что примерно за это время работы в команде у человека образуются норм софт скилы. Бывают просто отличные программисты, с которыми нету никакой возможности работать (чсв, токсики, просто мутные типы), тогда я охотнее возьму менее опытного, но более предсказуемого кандидата.
Интересно, что только 1 из 5 делает тестовое задание адекватно, без странных конструкций, хардкода, знают что такое eslint. В этом задании не главное, чтобы работало идеально, а как оно сделано и тут уже встречаются пиздецы.
Ms sql не поддерживает размещение дб в памяти, а в sqlite не поддерживается некоторые типы данных из ms sql
>>39020
Я ожидаю отдельного сервиса для get, delete, put. Хорошо сделаный paging (для этого нужно понимать сваггер). Отдельный environments. Использование pascalCase (или любой другой). Адекватное название методов (не find() или send()). В конце всё это должно быть запушенно с нормальным названием коммита. И ещё много вещей, на которые я обращаю внимания.
Обо всём выше я кандидату не говорю, он сам должен это знать. Я думаю, что ты бы смог решить поставленную задачу, но не сделал бы это на том уровне о котором я пишу. Знать язык программирования это в лучшем случае полдела, а умение им грамотно пользоваться это уже другой уровень.
Чтобы проверить как кандидат это сделает, каким путём пойдёт. При собеседовании на фуллстака сортировка и филтрование доллжны быть на бэке.
Но ведь и сейчас так работает. Аннотации называются атрибутами, и усё.
Какой-то фейковый прогресс, если честно, судя по описанию. Я ещё в прошлом году это говорил, когда тут сороки-белобоки носились с 5 а потом 6 дотнетом.
Дак проблема, что они опять собираются всё переделать. Как потом это всё учить? Книги-то выходят редко и на написание и перевод требуется 2-3 года.
Просто возьми книги 20-30-ти летней давности и окажется, что их новое - это тщательно затёртое старое.
20-30 лет назад все писали классненькие десктопные приложения, а не всякие веб-сервисы. Микрософты даже первый фреймворк для веба сделали как аналог винформам.
А вообще в том же Спринге есть просто класс конфигураций, где создаются всякие контексты, бины и прочая шляпа. А всё остальное можно писать как хочется, только аннотации развешивай. Полная свобода творчества.
А вот в АСП.НЕТ всё прибито гвоздями к полу. Вот тебе одна папка и туда пихай все контроллеры. Пофиг, что тебе надо 100500 таких контроллеров написать, всё равно пихай в одну папку. Про вьюхи и модели я вообще молчу, там полная помойка получается.
> десктопные приложения, а не всякие веб-сервисы
Платформа не важна. Важны паттерны. Поняв паттерны, ты будешь их реализовывать на любой платформе в средах любой степени разнородности, ваще на изичах, не испытывая серьёзных проблем, а мелкие проблемы решая мимоходом. То есть, иначе говоря, зная, твёрдо зная, какими паттернами ты реализуешь свой проект, ты не испытывая неудобств, легко переведешь его с десктопа на веб, с веба на десктоп, с моносервера на кластер, и т.д. и т.п. и др.
Почему тогда Спринг легко учится, хоть там и всякая параша с кофигурацией бинов в xml, а такой весь модный современный ASP.NET Core вообще не учится. На тебя вываливают какую-то словесную мешанину: веббилдер, хостбилдер, кофигуре - не кофигуре, билд - не билд. Да откуда я должен знать, что они там имеют ввиду!?
В теории рассуждают про какое-то промежуточное ПО, а где в коде слова middleware? Их просто нет. У них даже в наименовании ничего не клеится.
В ссылках упоминается пик-1 книга. Стоит ли начинать с неё? Смущает тот факт, что там очень старая версия шарпа. Или лучше сразу начать с пик-2?
Пик-2 тоже устарела. Сейчас уже C# 11 и .NET 7.
>Полный рабочий день на территории работодателя
>Офис недалеко от метро
>(17 минут)
>можно добраться на трамвае
>До нас 3 остановки
>35 000 руб. на руки
аххаха блядь
как сосется, шарпомухи?
Я за последние полтора года вообще ни одной книги не прочитал и как-то умудрился перейти с Core2.1 на .Net6
>Пофиг, что тебе надо 100500 таких контроллеров написать, всё равно пихай в одну папку
Что за хуйню ты несешь? Какую еще одну папку?
Это вкатунская вакансия. Можно считать это оплачиваемой стажировкой с которой через полгода спокойно можно на сотыгу свалить и дальше развиваться. Для вкатунцов самое то. На джаве на подобную вакансию человек 200 налетает в первые часы, а тут человек 15...20 наберется.
>вкатунская вакансия.
>Можно считать это оплачиваемой стажировкой
Опыт программирования с использованием языка С# не менее 0,5 лет;
Если открыть хх, то увидишь, что резюме на шарп столько же, сколько и на джаву. А вот вакансий на шарп раза в 2 меньше.
Причём шарп лезут в основном всякие птушники, потому что там модно преподавать шарп, а на джаве как правило выпускники универов.
Так это от первой строчки кода отсчёт. Опыт проганья, а не ком. разработки, так что вкатунская вакуха, потерпеть можно. Особенно если каждый день ездить на трамвае чижик.
Зубрил по книжкам на 1000 страниц.
У меня тогда 20 лет опыта программирования
return Ok(await _service.DoSomething(request)); ?
Да.
Нет. По справочнику Албахари и МСДН.
В нормальных вакансиях обычно указывают не "опыт программирования", а "опыт коммерческой разработки", а это дохуя разные вещи.
А я тебя еще раз спрошу - что за хуйню ты несешь?
Ты можешь спокойно создавать контроллеры где ты захочешь, хоть в корне проекта, хоть в каталоге Services. То что класс является контроллером определяется в первую очередь не тем где он лежит в проекте, а тем от чего он наследуется и какой у него внутри функционал.
Каталог Controllers, не более чем конвенция. Т.к. залезая в незнакомый проект, я ожидаю что контроллеры будут все-таки собраны в одном месте, а не размазаны по всему дереву проекта. Т.к. по факту это точка входа в него.
Хотя очень хорошей практикой все-таки будет хоть как-то группировать их по своим каталогам в пределах того же Controllers.
Не буду спорить, т.к. без реальных цифр это тупое дело. Но вроде в МВП треде был чел, который собирал помесячную статистику, там цифры были как раз наоборот.
Скажу только, что количество выходцев из училищ/универов величина более-менее постоянная. А вот за счет "выпускников" говнокурсов, java по количеству явно перевешивает, т.к. во первых всяких курсов по jave намного больше и они популярнее. Во вторых большинство курсов по шарпу ориентированы на геймдев, а их выпускники в принципе бесполезны где-нибудь за пределами разработки игр.
Если совсем грубо обобщить (прямо вот совсем грубо) на уровне вакансий не уровня выше мидл-минус.
Если на Java будет 100 и 200 резюме, то все эти кандидаты будут конкурировать друг с другом за все эти вакансии. В шарпе же в это время будет 50 вакансий и 100 резюме. Но из них будет вакансий 10 геймдева и на них будет 40 кандидатов, еще вакансий 20 легаси и на него будет еще 30 кандидатов зависнувших на .netFramework и на оставшиеся 20 вакансий энтерпрайза, останется 30 человек, что уже не настолько безнадежно как в Java.
>что в идеале апи
Скорее в норме.
>>39902
>return Ok(await _service.DoSomething(request)); ?
Это если у тебя "always return 200", если же по классике, то что-нибудь вроде:
return CreateResponse(await _service.DoSomething(request));
где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики.
мда. разучились люди сами учиться. курсы им подавай, книги им подавай
>в принципе бесполезны где-нибудь за пределами разработки игр.
специалисты по левой ноздре (с)
>специалисты по левой ноздре (с)
Ну, на самом деле, геймдев на любом языке будет сильно отличаться от другой деятельности.
>Это если у тебя "always return 200", если же по классике, то что-нибудь вроде:
>return CreateResponse(await _service.DoSomething(request));
>где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики.
Так для этого же есть промежуточное по, которое будет перехватывать эксепшоны и формировать нужный ответ.
>Так для этого же есть промежуточное по, которое будет перехватывать эксепшоны и формировать нужный ответ.
Мидлварь предназначен для обработки технических или общих фейлов. Ты же не будешь для каждого бизнес процесса свой отдельный мидлварь писать.
Как ты сам выучишь без курсов и книг?
Некоторые, кто давно вкатился, ещё находятся при ошибочном мнении, что они сами всему научились, хотя раньше на работу брали по факту окончания универа или технаря, а там их уже натаскивали опытные коллеги.
У меня однокурсник именно так и вкатился в 2008, хотя языка даже не знал. Тогда было модно С++ учить, а на всякие джавы и сишарпы мы смотрели свысока.
Насчёт курсов не знаю, но книги точно нужны. Я благодаря книгам в сосничестве освоил C++. Потом опять же по книгам освоил C#, WPF, ASP.net
У меня ProgramData.UserConfig 100% валиден - там много выше это проверяется сто раз.
>но книги точно нужны
не нужны. metanit, а еще лучше документация от microsoft хорошо описаны. Ну это если про шарп
Удалить круглые скобки и добавить 101-ю проверку.
Метанит пишет один чел. У него нет даже напарника, который бы правил опечатки и косяки. А любая книга проходит рецензирование и этим занимаются как правило серьёзные челы уровня профессоров в области компьютерных наук. Касательно сишарпа, авторы книг как правило имеют сертификаты от микрософт, что они реально специалисты в этой области.
Кроме всего прочего, книга у тебя будет всегда на руках, а метанит может в любой момент закрыться и твой вкат накроется медным тазом.
> где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики.
Можно поподробнее? У меня например бизнес логика просто кидает исключение при неверных вводных данных или ещё каких-либо проблемах. Как мне это исключение обрабатывать?
>У меня например бизнес логика просто кидает исключение при неверных вводных данных или ещё каких-либо проблемах. Как мне это исключение обрабатывать?
Странный вопрос. Ты когда исключение выбрасываешь, ты же не в воздух это делаешь. Ты должен всегда подразумевать где оно у тебя отлавливается и обрабатывается. Либо там же где ты его выкинул, либо из того слоя который у тебя дергает бизнес логику. Ну либо через мидлварь, но это уже изврат.
Какие для этого есть инструкции?
> Ты должен всегда подразумевать где оно у тебя отлавливается и обрабатывается.
Ну так я планировал его обрабатывать внутри контроллера, но это вроде как плохая практика, контроллер же должен быть пустым.
Вот к слову пример удаления. Нормально реализовано?
Там на старую версию, которая не поддерживает дотнет 7
>Нормально реализовано?
Нет. Как минимум, потому ты пробрасываешь конретный эксепшен, а ловишь общий.
Алсо, всегда ставь скобки в If-ах, не будь мудаком.
Во первых - when используется не так. В том смысле, что тут он вообще не нужен и достаточно простого Catch(ArgumentOutOfrangeException ex). То что ты написал работать будет, но выглядит максимально по индусски.
Во вторых попробуй напиши в одном контроллере несколько похожих методов и ты сразу увидишь, что в каждом из них у тебя будет повторяющийся код из одинаковых цепочек catch-ей. И куда-то в одно место ты их не вынесешь, что сильно ломает DRY принцип.
Если бы ты возвращал стандартизированный ResultObject, тогда тебе всю его обработку и распил на IActionResult, можно было бы вынести в отдельный экстеншен единый для всех контроллеров. И тогда все методы в них действительно состояли бы из одной строки.
400 выдаст валидатор входных данных и метод контроллера будет пуст от этого
500 выдаст мидлваря если до нее долетит какое то исключение - чего так то быть не должно.
как и 404 вообще роутинг выдаст
Вот очень хорошее видео. Чел очень хорошо рассказывает, то что я пытался криво в своих ответах рассказать. Подробно объясняет как и почему не нужно кидать исключения и как от этого уйти. И даже небольшой бенчмарк показывает.
Особенно понравилась мысль, что использование мидлвари для отлова эксепшенов в целях реализации контракта - подход сродни использованию goto в своем коде.
Вкатунцам на заметку, если сможете разобраться, реализовать подобное в сових петах, которые прикладываете к резюме и объяснить на собесах почему и зачем так сделали, то на место джуна влетите со свистом.
>>35 000 руб. на руки
Ты долбоеб?
Там
>>•Оклад на постоянной основе 35.000-40.000 рублей
>>Оклад
Это значит что зп - 70к-80к.
Зп = оклад. Остальное держится на честном слове и срезается до нуля при любых колебаниях экономики.
двачую этого реалиста
либо срезают под поводами, либо "ну мы же тебе платим, значит больше можем требовать"
> и срезается
Или не срезается. При колебаниях тебе и оклад могут порезать.
Да, сама схема оклад+премия бесящая (особенно когда ею оперируют в ростатах нарисовывая несуществующие средние зарплаты).
Но тем не менее это не значит что там платят только 30к.
Ну а то что это галера где за любой чих ползарплаты отбирают... Так а что еще ждет начинающего масленка? Галера и ждет, а дальше он сам должен выбиваться в сеньоры.
Плюс там может быть не только премия, а еще и надбавки к окладу - вот их уже не могут срезать. Например у меня в зп 30% от оклада - северные и стаж.
>Да, сама схема оклад+премия бесящая (особенно когда ею оперируют в ростатах нарисовывая несуществующие средние зарплаты).
За один месяц выдали 100.000 рублей (50 премия + 50 оклад), во второй только оклад 50 тысяч, средняя зарплата за два месяца -75 тысяч. А по твоей логике должна быть 50?
Если классические исключения настолько ресурснозатратны, то почему голованг ругают за их реализацию в сущности как в данном видео?
Я х.з. гоферы вроде тащатся от реализации.
Сам я не го пробовал, но из того, что об этом читал могу назвать такие недостатки (конечно это исключительно мое личное мнение):
1) Выглядит несколько прибитым гвоздями. В шарпе ты можешь пользоваться исключениями, можешь не пользоваться, можешь смешать все вместе. Тут же создатели языка включили вахтеров и установили единый способ.
2) Такое ощущение, что там весь стектрейс и контекст к проебывается к херам по дефолту. Думаю лет через 5...10 те кто будет разгребать, то что нынешние говнокодеры наклепают, будут крайне опечалены и разозлены этим фактом.
Просто голанг разрабатывали люди, которым нравится старый сишный стиль программирования. Тебе не надо изучать тонны фреймворков и библиотек, а ты сам выстраиваешь логику программы как хочешь.
Я бы вот лучше голанг пошёл изучать, чем долбиться в этот асп.нет. Но туда не берут вкатунов, а только опытных челов.
>Просто голанг разрабатывали люди, которым нравится старый сишный стиль программирования.
Ну т.е. любителями велосипедов.
>Тебе не надо изучать тонны фреймворков и библиотек, а ты сам выстраиваешь логику программы как хочешь.
Угу, тут будет старая шутка про то что каждый разраб на С начинает с придумывания своей библиотеки для работы со string-ами.
Ну и так, к сведению, C# тоже не хуем с горы создавался.
Андерс Хейлсберг (род. 2 декабря 1960) — датский инженер-программист, создатель Turbo Pascal, Delphi, C# и TypeScript.
Т.е. чел как бы шарящий за все эти вещи.
Ну и при желании ты на шарпе также можешь навелосипедить что угодно. От высочайших ООП абстракций, до адской БДСМ байтоебли. Его плюс как раз в оптимальном соотношении удобство/возможности
>>41894
>Я бы вот лучше голанг пошёл изучать, чем долбиться в этот асп.нет. Но туда не берут вкатунов, а только опытных челов.
Вкатунов сейчас никуда не берут. Это сродни выйгрышу в лотерею. А год...два назад и в гоферы можно было спокойно с улицы залететь.
Вот такие смузихлебы-вкатунщики сейчас и визжат что айти умирае... И я очень рад что это айти-гнилье наконец-то начали гнать из фанга (а значит скоро мода дойдет и до остальных)
Видите-ли он не хочет работать со старым говном. А нахуя он тогда нужен?
Ну смузихлебы клепающие говносайтики под ключ с нуля не понимают что что в промышленности не пишут каждый год с нуля весь софт
Даже просто если обновлять технологии - то это не год и не два, и возможно нужно соорудить переходные прослойки.
Я например так работал - переделывал софт с vb на шарп - сначала накидал фронтэнд и связал код со старым кодом (были красивые вызовы vb кода из шарпа) - чтобы оно сразу все работало. Теперь постепенно убираю эти связи переписывая бэкэнд в критичных местах. При этом оно все работает прямо сейчас в промышленности. Начальнику не нужно ждать десять лет - когда там новый софт заработает, он уже видит новенький красивый гуи и его хотелки появляются сразу.
Понятно что если в этот момент понадобится новый программист - но будет требоваться знание и vb и шарпа. Но это на время переходного периода, в конце все связи с vb должны быть уничтожены.
Гугли ICloneable, Поверхностное копирование, Глубокое копирование. Реализуешь то, что подходит под твою ситуацию.
Перебираешь список, делаешь полный клон каждого объекта и помещаешь его в новый список.
Придется как минимум разобраться в вопросе копирования содержимого объекта в другой объект. Простого и готового способа тут нет.
>создатель Turbo Pascal, Delphi
Вот теперь и приходится использовать этот уродливый PascalCase, вместо няшного camelCase.
Челик, ты же в курсе, что PascalCase, это и есть CamelCase, да? А то, на что ты так неистово дрочишь, это его разновидность - loweCamelCase.
И в шарпе, так же как в Java, Go и VB, используются они оба.
Вот так.
Почему в Java спокойно используют ссылочные типы допускающие null, а вот микрософтам этот null чем-то мешает?
Почему? Тащем-та линк это просто про перебор коллекций с данными, какое отношение это имеет к прокидыванию результата между слоями?
Ну и даже если у тебя это как-то завязано, то linq это по большому счету расширения, на которые ты можешь накинуть свою обертку и точно так же их использовать, это будет даже еще удобнее.
> Почему? Тащем-та линк это просто про перебор коллекций с данными, какое отношение это имеет к прокидыванию результата между слоями?
Потому что внутри селекта нельзя просто написать return Result, нужно в любом случае перебрать все значения, затем ещё раз их перебрать чтобы проверить была ли ошибка, и только тогда вернуть result из метода.
Ну и да, исключение же можно спокойно кинуть хоть из десятка вложенных селектов, за что собственно и любимы.
Пример приведи. Чет я плохо понимаю, какие у тебя могут быть ошибки в селекте, который по факту просто проекция данных из одной модели в модель.
Еще раз. Select это проекция уже выбранных значений.
есть ли способ в студии быстро привести их в соответствие со структурой во всем проекте?
>Почему в Java спокойно используют ссылочные типы допускающие null
где спокойно? NRE на NRE и NRE погоняет. Забавно видеть в каком нибудь еклипс или пишарме иногда NRE в его тулзах.
>а вот микрософтам этот null чем-то мешает?
гугли "ошибка на миллиард долларов" - там пояснят
С нуллабле можно писать и без NRE конечно, просто это сложнее био нужно самому следить. вот для этого и делается "пусть компилятор где может сам следит". Так что языки где СРАЗУ есть четкое разделение на нулл типы и нет - просто больше защищают от ошибок вида "не уследил"
И не нужно говорить про "следи лучше".
Если код пишешь не ты один, то нужны жесткие контракты, а это выливается в итоге в использование всяких NullGuard и анализаторы, что по факту то же самое
resharper - пкм на нужном пункте в дереве проекта и Refactor - Adjust Namespaces
студия 22 - пкм там же - Sync Namespaces
что там раньше не знаю. я всегда жил на решарпере.
блин у меня 19 студия..
Если бы на джаве была бесплатная полнофункциональная ИДЕ, то все бы учили только джаву. Сишарп держится только за счёт бесплатной вижлы.
На шарпе легко писать код хоть в блокноте, не надо запоминать громоздкие пакеты и всякие LocalContainerEntityManagerFactoryBean. Это в жабе без иде хуй что напишешь.
а куда IDE делись? я не жавист но помню там была eclipse, NetBeans, та же андроид студия фри, хоть писать на ней не под андроид геморнее.
Сейчас джавист - это IDEA-разработчик. Все курсы и книги пишут для идеи, если у тебя нет идеи, то ничему не научишься.
ох уж эти "специалисты по левой ноздре". (с)
если чел не может научиться без книг и особой IDE - он говно, а не программист.
Наоборот, язык - простой, легкий в обучении, а экосистема - сложная и неудобная.
> простой, легкий в обучении
синклер бейсик еще проще в обучении, но как то ценится удобство писать код, а не учить язык.
Как бы важна способность просто и удобно выражать мысли в код, а не плясать с бубном.
И тут у жавый полная жопень. Например, вместо удобной async/await, что ЛОЛ будет уже небось и в синклер бейские даже, но не в жаве - в жаве нужно городить огородище.
> простой, легкий в обучении
То есть примитивный. Понятное дело, что язык легко выучить, если в нём нихуя нет и всё делается через библиотечные костыли.
слух, жавист, если бы ты сюда с котлином пришел, то у тебя были бы аргументы
но с жавой....это болезнь.
Я выберу послать жависта с его найтупейшим сравнением в его родной тред и там нести бред.
Но как раз в джаве удобно писать и ещё удобней читать код. Не нужно держать в голове тонны сахарных конструкций. Все прописано явно.
Синклер Бейсик же не был даже структурированным языком. Простой цикл типа while там надо было расписывать в виде IF-GOTO. Многочисленные переходы превращали всё в спагетти-код.
Помню как-то в журнале "Наука и жизнь" в конце 1980-х публиковали программы на Бейсике, но с ходу разобрать код было невозможно. Приходилось расписывать эти макаронины на отдельной бумажке в виде блок-схем.
В сишарпе тоже самое, приходится весь сахар выписывать на бумажку и смотреть во что разворачивается та или иная закорючка. И боюсь, что в ноябре микрософты ещё накинут нам сахарку, что все офигеют. Какую-нибудь конструкцию языка сломают так, что придётся по новой переучиваться.
Джава - это чистый ООП язык. Если ты соблюдаешь ООП-стиль, то проблем не возникает. Проблемы как раз в сишарпе, который пытается добавлять сахарок, чтобы продолжали писать в процедурном стиле. Сишарп позволяет много вольностей в плане размещения классов по файлам, самих файлов по папкам, и порой малоопытный программист клепает лютый говнокод. В джаве же изначально приняты стандарты, которые заставляют писать упорядоченный код.
>В сишарпе тоже самое, приходится весь сахар выписывать на бумажку и смотреть во что разворачивается та или иная закорючка.
Чувак мы поняли уже, что джависты тупые и без бумажки код разобрать не могут. Съеби уже.
Сарказм, если что. Не считаю джавистов тупыми, кроме конкретно вот этого.
Легкость и простота джавы не говорит о том, что на ней пишут тупые. Напротив умный человек будет стремиться к простым и элегантным решениям.
Разве можно назвать код на сишарпе таким? Нет, там в одной строчке может быть с десяток всяких знаком вопросов, восклицательных знаков и прочих закорючек. Такой код сложно читать и воспринимать. Код на джаве же порой читается также легко как текст на английском (для тех, кто понимает английский).
>Но как раз в джаве удобно писать и ещё удобней читать код
ага ага. правда вместо 2 строк получается текста на 3 страницы, но то такое.
>>43748
>Код на джаве же порой читается также легко как текст на английском
только читать приходится много. И ничего хорошего в этом нет. Аж вообще ничего. А в случае с многопотоком еще и держать большой контекст в голове, ведь сложное выраженное убогими словами как бы добавляет сложности.
Ты как программист всё равно должен вникать во все тонкости. Разница лишь в том, что на джаве ты сам выстраиваешь логику приложения, а сишарпе вынужден подстраиваться под микрософт. Если они завтра выкатят какое-нибудь говнецо, то придётся им пользоваться, потому что выбора нет. При этом ещё и вникать в кишочки этого говнеца, полностью в нём вымазавшись.
Программирую, но программисты на ассемблере не нужны.
Лучше смотри в сторону .NET с модными молодежными микросервисами, без ГОвна только. Я сам декстоп винФормс + чистый бэкенд, но монолиты. Перекатиться с миддла почти 4 лвл на миддл/+ на чистого бэкендера с стейт-оф-арт стеком пока не получается.
Пошёл нахуй.
Фу, я учился на это. Не хочу обратно.
Ну в сторону модных молодежных сервисов и смотрю, только как в них с десктопа залететь - вопрос. В вебе я сделаю выпуки на уровне вкатунцов курсовых.
Какой забористый бред ты несешь. Жавист, уходи. Ну просто траллишь же, что допустимо, но хоть бы не делал это так уныло.
>что на джаве ты сам выстраиваешь логику приложения... вынужден подстраиваться под микрософт
подстраиваются не под вендора, а под средства языка
из-за ограниченности выразительных средств вынужден строить монструозную хрень только потому, что иначе на этом убожестве и не выразить. сравни многопоток на жаве и... да на чем угодно.
> то придётся им пользоваться
да прям таки. неудачные концепции отмирают. примитивная концепция new Thread()/BeginXXX в шарпе давно заменилась на удачную концепцию TPL/async+await и первое используют имхо только в школах школьники.
Объясни мне, анон, без троллинга, почему Foo(IAboba aboba) не равно Foo(T aboba) если вместо T вызывающая сторона может поместить только IAboba?
Потому что сишарп не поддерживает ковариантность и контравариантность
Потому что интерфейс требует реализации конкретной функции, и ему похуй на твои ограничения.
Ну так и скажите что пацаны не вывезли в таблице вызовов поэтому НИНУЖНО (ну или это я шиз и такого кейса никогда не было)
Если у какой-то функции в компайлтайме с применением ограничений сигнатура соответствует функции интерфейса - это одна и таже функция, и интерфейс должен считаться реализованным, хули нет то?
Если proposal на гитхабе накидать, индусы сделают или обоссут?
И вообще, как поступить в такой ситуации: мне надо драг н дропом перетащить итемы из одной условной таблицы в другую. Из одной таблицы я формирую список итемов, а в другой он обрабатывается и может этот список повредить. На чьей стороне, так сказать, возложены обязательства?
С одной стороны неизвестно кто и каким образом будет обращаться с твоим списком и логично делать копию на стадии формирования списка. С другой стороны метод обрабатывающий список как бы становится небезопасным т.к. шатает список, а пользователь может этого и не просил. Если будут двое копировать список, то дюже затратно.
А, нашел. Это типа оболочка поверх существующего листа.
ну ты создаешь open generic. Чтобы этой твой класс смог реализовывать интерфейс, компилятор должен сразу создать closed generic версию класса. И очевидно это не было сделано потому что "хз зачем это нужно"
пока не поддерживается решарпером - считай что такого нету
а еще методы без классов... и много другого
но увы шарп это жаваклон со всеми его детскими болячками.
Сорян, просто чуть выше был тип который жаловался на неимоверную сложность запоминания модификаторов в шарпе.
И нафига он нужен? Почему в джаве прекрасно живут в 4 модификаторами доступа, а в сишарпе их всегда мало?
Ну, не знаю, как насчет ноги, но от третьей руки я бы не отказался.
В крестах вообще 3 и всем хватает!
Че так рвонкьнул то?
Потому что петушарп.
Оптимизация компилятора
потому что интернирование строк
Хранилище это база данных. Репозиторий - это слой доступа к данным. Его в принципе может и не быть.
А чо ты только M развернул и то не полностью? Разворачивай V и C тоже, получишь аббревиатуру из 20 букв.
У меня и раньше отапливался websocket со студией, но по крайней мере с ним отапливался только хот релоад и отладка на стороне клиента (что тоже конечно хуево), а сейчас совсем нихуя не запускается. Гугление навскидку пока нихуя не дало.
Потому что микрософты в каждой новой версии всё ломают. Я про это постоянно говорю, но мне никто не верит.
Вообще не ебу какие вопросы будут и что подучить чтобы не полностью обосраться.
Выучить модификаторы доступа. Их любят спрашивать, потому что на них легко завалить.
На вскидку:
- отличие doble, int, decimal
- что возвращает метод async
- отличие абстрактного класса от интерфейса
- объясни модификаторы доступа в c#
- отличие unit тестирования от integration
Можешь посмотреть ещё c# design patterns, бывает, что спрашивают.
Могут ещё на знание сахарка пример подлый подсунуть, чтобы проверить не с джавы ли ты свичнулся.
string checkNull(string? maybeNull)
{
return maybeNull == null ? null : "";
}
А, типа возвращаемое значение string а не string? и все равно вернет null метод если тру?
Есть такой интерфейс ICloneable
И какой толк от него, если кго функция Clone требует возврата Object, а не нужного мне класса?
Если нажать несколько клавиш и вывести KeyStates в консоль, то пишутся состояния через запятую, типа:
LeftMouseButton, ShiftKey
Перечисления ведь передаются в единственном числе.
Они складываются, а вывод в консоль это как-то детектит.
LeftMouseButton = 1
ShiftKey = 4
На выходе будет 5
хотят и говорят. это логическое деление
V - вид отображающий
M - вся логика которая что то делает
C - отвечает за связь остальных букв и интерактив
И всем понятно. Ведь всем понятно, что это описывается деление на логические куски и им дали более менее подходящие названия.
Ну кроме тех, которые "постойте постойте, кака така модель? я вот моделями называю классы, что репа с ними работает, а тут модель что то не то, вы что угораете?"
Да.
С нуля не реально. Нужно знать какой-нибудь язык типа джавы, тогда за полгода-год реально осилить. Но имей ввиду, что за это время микрософты выпустят новые версии сишарпа и дотнета и придётся снова переучиваться. Следующая версия как раз LTS, а они любят под неё все переворачивать с ног на голову.
давно известно что первый язык (программирования или разговорный) выучить сложнее всего. Остальные идут намного легче. И чем больше базового познаешь - тем легче очередной язык.
так что нет понятия "лучше", есть "легче", но шарп тут не причем. Это касается вообще любого языка схожего по парадигме.
Можешь выучиться старый сишарп, а потом свичнутся на новые версии
Он троллит. Речь идет о нюансах, к которым новичку как до Китая раком. Никто основы основ не переворачивает.
Я как новичок, максимум с чем сталкивался — затупом найти нужный шаблон на старте.
Петушарп в принципе включает многое из жабы, на нём в теории можно писать понятный код. В теории. На практике майки себе в обезьянки заделали тех, кого легче всего заделать - самых тупых кодомакак. И теперь мы имеем, что имеем - живое представление того, как из двух почти идентичных языков можно сделать абсолютно разные экосистемы.
И как?
Не спрашивали всю эту хуйню. Дали тестовое - я его норм сделал не без огрехов и взяли. В процессу всю эту залупу можно выучить. И то, по необходимости.
В чём преимущества и недостатки сишарпа по сравнению с джавой? Что выбрать новичку: джаву или сишарп?
Те не похуй? Нормальные оба языка, мне сисярп больше нравится - приятно на нем писать.
Если сомневаешься, то точно в джаву.
По задачам.
Петушарп позорно использовать. Если по существу - огромное количество говнокода, вечные попытки догнать жабу, уебищная экосистема.
Зато есть проприетарная жаба, оракл и WebSphere. Эх, были времена...
есть в такой рекурсии подводные камни?
>Петушарп позорно использовать
Я такое уже неоднократно слышал, но не понимаю почему. Это из-за микрософта?
>уебищная экосистема
Тут ты не прав. Наоборот в дотнете всё доступно из коробки. А вот в джаве наоборот надо выискивать от сторонних разработчиков и применять разной кривости решения.
Сравнить тот же Thymeleaf и Razor. В первом нельзя делать даже вложенные шаблоны, а второй позволяет чуть ли не писать код вперемешку с разметкой, полная свобода.
>Это из-за микрософта?
Убогий клон жабы с кучей бесполезного говносахара, кучей говнокода в экосистеме от школьников, кучей школьников в комьюнити, кучей анальных палок всем системам, кроме шинды, куча пиздежа, в том числе про кроссплатформенность.
Не нужно.
>жабы с кучей бесполезного говносахара,
жабист не палится. совсем не палится. привык к МНОГОСЛОВНЫМ, монструозным, многостраничным описаниям ПРОСТЫХ вещей и считает что его говно не пахнет )
>)
Чё так рвонькнул-то?
Пока жабисты ставят @AllArgsConstructor и @Getter, петушарперы пишут убогое {get, set}.
А мне нравится явно писать геттеры-сеттеры. Код как-то красивее выглядит с ними. А сишарпные { get; set } к тому же не гибкие, к ним надо костылить дополнительное поле, которое жрёт ещё память.
Магические атрибуты - убивают жаву, няша.
Это очень плохая хуйня. Негодная.
Чем больше магии, тем хуже. Банально, ты не можешь даже перейти к куску кода, который эту магию делает.
Вот майки - это поняли и потому - из фреймворка потихоньку выпиливаются атрибуты магические. И это - хорошо.
Это такой троллинг тупостью? Шарповые геттеры и сеттеры это просто сахарок для методов huinya getHuinya() и void setHuinya(huinya value). Они настолько же гибкие, как и явные геттеры и сеттеры. Или ты каким-то чудесным образом придумал как хранить состояние объекта, не заводя под них поля внутри класса, которые в эти геттерах и сеттерах вертишь? С производительностью и потреблением памяти там все одинаково. Единственная разница, что со свойствами компилятор за тебя генерирует часть бойлерплейтного кода.
Вот, на покури, как это все в CIL выглядит:
https://sharplab.io/#v2:C4LglgNgPgAgTARgLAChUwMwAJ5YOID2AbgHYFYDeqWNO2YJwWAgpVgOYCmwA3FgM7c+AX1Si0KTDjhYAsgQDGACwCGlarQAOAJzBEVwTlgZMA+ip4aaVuscYssNio5S03HblgC8APnN8bN0EmXyxzbyx9CABXTgDXWnFxdGxcWRUIFQAzAE81KgSaHT0DIxMwixsbKXK8bmYACgBKFzdnQNoYAHYKy0KscTdq1IAWLABleobyqNiWp1b3GnCvSIzY+LckoA
Как можешь заметить, для свойств сгенерировались методы-геттеры (get_A) и методы-сеттеры (set_A). И тела у них такие же, как у написанных ручками.
>ряяяяяяяяя!!!!
А по делу есть чё сказать? Например там пруфы что это магические атрибуты и что я должен ручками, как истинный петушарпер, делать конструкторы?
@
РЯЯЯЯ НИНУЖНА!!! И ЭТА ВАЩЕ МАГИЯ!!!
@
С ЛИЦОМ АНАЛЬНИКА ДУБЛИРУЕШЬ ВСЕ ПОЛЯ В КОНСТРУКТОР
@
@
@
ДОБАВЛЯЕШЬ МАГИЧЕСКОЕ {get, set} К ПОЛЯМ
Ну. Дык это буквально магические атрибуты.
Если ты взглянешь на них, без знания, что это за магия - ты не поймешь как они работают. Ты не можешь перейти и посмотреть что за код выполняется, как и где. Конструкторы - имеют 0 ссылок на вызов. Приватные поля - магическим образом получают геттер-сеттер.
Это магия в чистом виде.
А любая магия в программировании - плохо.
И да. В шарпе - такую же магию ты можешь запилить сам буквально за 10 минут. Просто тебя ссаными тряпками закидают, и именно потому что это магия, которая не решает никаких проблем, но усложняет понимание твоего кода.
>РЯЯЯЯЯЯЯЯЯ ЯСКОЗАЛ ЛУЧШЕ РУЧКАМИ КОНСТРУКТОРЫ ПИСАТЬ ПОТОМУ ЧТО КРИВОРУКОЕ ШКОЛОКОМЬЮНИТИ НЕ СМОГЛО В ЛОМБОК, ЯСКОЗАЛ НЕУДОБНО @ALLARGSCONTRUCTOR ПИСАТЬ, ПОТОМУ ЧТО РЯЯЯЯЯЯЯЯЯЯЯ
вы только посмотрите. мне тут ранее хвалились что IDE сама генерит getVar()/setVar() и это был повод для гордости.
это ж как издеваются над жавистами что заставляют их плодить бойлерплейт код, хотя компилятор мог бы генерить
Хотел создать событие SelectionChanged для собственного класса, и под это дело решил заюзать дефолтный SelectionChangedEventArgs. Но эта параша требует id класса RoutedEvent (первый параметр).
Простите за французский бейсик, но думаю все ясно.
Я - отвечаю по делу, если ответ знаю и вопрос нормальный.
>Но как потом перейти на 7 версию?
Учишь по книжкам, делаешь проекты. Когда будешь готов, открываешь официальное руководство от майков по переходу с 2.1 на 7.0 и переводишь свои проекты. В процессе научишься.
>Сильно ли это сложно?
Если учишься по принципу: "скопировал пример из книжки, если собралось/запустилось - то значит я научился, идем дальше", то да. Если же вдумчиво перебираешь кишочки и понимаешь зачем и что нужно, то нет.
Потому что так диды делали и ты будешь.
А если серьезно, потому что dotnet-ef не часть студии.
Если же тебе прямо совсем нужно, то там вроде были расширения для консолефобов, позволяющие мэнеджить миграции из студии.
Дак проще тогда всё делать в VS Code. Там и консоль удобнее и файлы сами сохраняются, да и выглядит модно-молодёжно.
Можно делать через диспетчер пакетов. Кнопочкой выбираешь нужный проект в решении, вводишь add-migration initial и наслаждаешься.
Делай, я разрешаю.
Если бы я был богатый, то купил бы платную идею и учил джаву.
Пик 1 - проблема
Пик 2 - то, что я установил
Пробовал и в VS 19, результат один
Раньше как-то получалось.
Сейчас: в дизайнере форма есть, но при сборке проекта ошибка
Да, на Шарпе это всё проще, но мне надо на крестах, но не собирается
Извиняюсь, что сру уже в третий тред этим, просто испытываю довольно жёсткий баттхёрт с этого. Помогите, пожалуйста...
Из треда плюсов послали к вам
Спасибо, я видел эту простыню и она меня сукгнула. Хотя щас еще раз пересмотрел и по факту нужна только часть EventManager.RegisterRoutedEvent.
Я не понимаю о чем речь идет. Когда-то открывал исходники на C++ и тоже была муть с версиями VS. В 2015 открывается, а в 2019 и выше — нет.
>Я не понимаю о чем речь идет.
Мне винформу нужно создать, при запуске получается пикрил
Не понимаю, может, установил что-то ненужное и происходит конфликт?
Да. CLR Empty Project (.NET) -> Project -> Add new item - > UI -> Windows Form
Ну я с тапким точно не имел дела. А ты пробовал искать по всему проекту конфликтующие строки?
У тебя там где-то затисались 2 версии одной библиотеки.
Разрули руками какую использовать. Чревато тем, что половина всего отвалится.
Есть переменная так называемой активной кнопки ActiveButton, где лежит ссылка на одну из кнопок списка Buttons.
Как мне сделать так, чтобы событие нажатия кнопки срабатывало только от ActiveButton?
Есть какое-то лаконичное решение без подписки на всю сотню кнопок списка Buttons? Может через какой-то биндинг.
Вот я видел, что в DataTemplate (xaml) можно привязать событие к каждому итему в списке. Он что, рили подписывается на каждый итем из списка?
Через ling Where (x=>x.ActiveButton == true):
dotnet ef migrations add PizdaBilyat
dotnet ef database update
Что не так? Тряска? Неуверенность? Пройдет с опытом.
4.8
А разве 3.1 уже не поддерживается? Или оно в основном сейчас всеми все еще юзается?
Как это не было? Они в 6 убрали Startup.cs и теперь не понятно куда писать код.
На 3.1 успели написать достаточно много и монолитов и микросервисов (которые как раз стало удобно делать начиная с 3.1). Поэтому вероятность даже в следующем году попасть на проект с 3.1 где тебе предстоит что-то доделывать или писать новое - достаточно высока. Плюс никто не даст джуну писать, что-то новое сразу на .net6 или .net7, такие игрушки дяди сеньоры оставляют для себя. Ну а идти работать без опыта куда-то где есть что-то ниже чем 3.1 смысла нет.
Спасибо, что пояснил. Посоветуешь хорошей литературы по этой версии? Кроме 3 часового видоса на ютубе и книжки на 130 страниц мало гуглится
А, еще 10 часовой видос, но это по mvc, хз, юзают ли его до сих пор, мне чет кажется, что сейчас все на webapi + жаваскрипте, еще в некоторых вакансиях даже видел блейзор
mvc от webapi отличается только чем ты пукаешь в ответ на запрос - технология то одна и та же. Бля... Мне видимо самоу придется учить жопаскрипт хэтэмээль и сисисэс... Не хотю...
и как данные на фронт идут - формируются динамически и отправляются в случае разора и прочей обмазанной жабаскрипто дрисни, или же пукаешь жсончиком на развернутый в браузере фронт.
>Посоветуешь хорошей литературы по этой версии?
Хуй знает, я за 5 лет в профессии ничего кроме Рихтера и краткого справочника Албахари не читал. Все остальное по офф. докам от майкрософта изучал, там инфа по всем версиям есть.
Я тоже не хотю учить жаваскрипт и хэтэмээль, я только закончил 150 уроков по sql от kudvenkat, думал я до этого SQL знал, а оказывается нихуя и у того же метанита наверное всего 20% контента, которое он описывает.
>>51598
Хуясе ты чад, я Рихтера тоже читал, но давно, хотя многое до сих пор помню.
Хз у меня на работе десктоп, есть webapi небольшое. Поковыряю асп.нет, поковыряю всякие медиаторы cqrs немного тестов и прочую дрисню крутану еще годик попыта и влечу куда-нибудь надеюсь посытнее. План такой. Насчет фронтодрисни хз, если честно. Пока молодой все интересно, все хочется потыкать, но энивей времени есть где-нибудь полгода - нужно как-то концентрированно зазадротить. С жабаскриптохуйней вроде шансов повыше залететь, но платят фулстакам все равно меньше чем ГО-внерам, хотя хз.
Хех, я только что отсмотрел 150 видосов от kudvenkat по sql, дальше у майкрософтов прочту про asp.net core 5, позадрачиваю некоторые задачки на литкоде, попробую парочку проектов на гитхаб аплоднуть, выучить git и docker, повторить энтити фреймворк и пойти уже собеседоваться.
Думаю за месяца 2 управлюсь, я до этого уже имел опыт и с asp.net core и энтити фреймворков и sql, но вот html, javascript и css у меня соснулые.
> событие нажатия кнопки срабатывало только от ActiveButton?
Чагоблять?
У тебя все кнопки видны? Их все можно нажать? Но одна из них будет работать? Ты сам то не чувствуешь проёб в дизайне своём?
Перекатываюсь из 1с, тестовое задание сделал как-то по наитию
На ютубе есть полно курсов по шарпу, типа многочасовых видео.
Смотришь 10 часов шарпа, потом 4 часа EF, 4 часа форм, 6 часов ASP. Как раз укладываешься.
Если отвечать прямо на этот вопрос, то да.
Меня больше интересуют идейные люди, чьи интересы не ограничиваются работой "от" и "до".
Это всё на добровольной основе и никак не регламентировано. Я буду благодарен любой помощи, даже если это будет 10 минутная переписка с наставлениями и рекомендациями.
Вы видите копию треда, сохраненную 2 февраля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.