Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 1070 150 213
C# thread #49 /csharp/ Аноним 21/06/23 Срд 11:11:16 2740238 1
16839993058000.jpg 139Кб, 750x422
750x422
16839993058001.jpg 257Кб, 960x720
960x720
16839993058022.jpg 206Кб, 700x1114
700x1114
16839993058023.png 27Кб, 800x550
800x550
Тред лучшего языка на планете

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# для десктопа
https://docs.microsoft.com/ru-ru/dotnet/desktop

4. С# для мобильной разработки
https://docs.microsoft.com/ru-ru/dotnet/maui

5. С# для создания нейросетей
https://docs.microsoft.com/ru-ru/dotnet/machine-learning/

6. С# для игр
https://ru.stackoverflow.com/a/609901/422180

7. Годные ютуб-каналы
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
Прошлый тред: >>2697488 (OP)
21/06/23 Срд 11:20:31 2740261 2
Ну ты и дебил блять ебаный, перекат после 1000. Репорт.
Аноним 21/06/23 Срд 11:28:34 2740275 3
>>2740261
Бамплимит на доске 500 постов
21/06/23 Срд 11:30:38 2740280 4
Аноним 21/06/23 Срд 12:05:58 2740341 5
>>2740280
Перекатывают после 500 поста, лентяй.

Ананасы, обращаем внимание на новые возможности лучшего в мире и всеобъемлющего языка программирования:
С# для создания нейросетей
https://docs.microsoft.com/ru-ru/dotnet/machine-learning/
Аноним 21/06/23 Срд 17:35:33 2740725 6
>>2740341
Добавлю в пастбин как буду дома. Еще сделаю анимешку в ОП-пост, а то перекатывальщик лодырь не находит красивые пикчи в шапку
Аноним 21/06/23 Срд 18:15:10 2740767 7
Разбить бы ебало пидору, который придумал модификатор internal...
Аноним 21/06/23 Срд 18:21:37 2740770 8
>>2740767
Если бы его не было ты сейчас орал "разбить бы ебало тому кто меняет внутренее апи либы потому что я его юзаю"
Аноним 21/06/23 Срд 18:59:59 2740797 9
>>2740767
Та ты гонишь.

Вот с другой стороны - разбить бы ебало пидору, который:
1. Сделал возможность наследования по умолчанию. Приходится как дебил постоянно sealed добавлять
2. Сделал enum таким кастрированным. Вот срсл, сравнить с С++ или жавой.
3. Нахуевертил вот этой хуйни с интерфейсами, которая сейчас. Это реально пиздец.
4. Нахуевертил эксепшинов там где они нахуй не нужны. Вот серьезно, какого хуя-то отключение сокета на другой стороне - должно кидать исключение-то? Ошибка со статусом - нормально было бы. Нет, блядь, лови в ебало эксепшн(Охуенно-то как если у тебя какой-то парк устройств, свет вырубился - твое приложение - на 5 минут - ушло в себя обрабатывать все это добро)
5. Перекатывает после 500 поста
Аноним 21/06/23 Срд 19:51:36 2740847 10
>>2740797
Чего у тебя жопа сгорела? Всё по правилам перекатов.
Аноним 21/06/23 Срд 19:51:54 2740849 11
>>2740767
Дебил, модификаторов наоборот не хватает нихуя. Где модификатор доступности только внутри неймспейса?
Аноним 21/06/23 Срд 20:23:38 2740895 12
2023-06-2120-18[...].png 131Кб, 1158x113
1158x113
Почему автор дважды конвертирует значение в стринг, вместо того, чтобы присвоить локальной переменной?
Аноним 21/06/23 Срд 20:24:46 2740898 13
>>2740895
Потому что он говнокодер. Как тебе такой ответ?
Аноним 21/06/23 Срд 20:29:49 2740901 14
>>2740849
>Дебил, модификаторов наоборот не хватает нихуя.
Почему именно интернал ставится по умолчанию? И можно это как-то изменить?

>>2740898
Но он же сертифицированный работник майкрософт!
Аноним 21/06/23 Срд 20:31:25 2740903 15
>>2740895
Потому что хочет однострочник написать.

А экономить на спичках иди в си.
Аноним 21/06/23 Срд 20:35:40 2740905 16
2023-06-2120-30[...].png 134Кб, 1197x928
1197x928
>>2740901
>Но он же сертифицированный работник майкрософт!
Если эти умельцы создали медиаплеер, у которого субтитры чисто белые, без контрастного фона или обводки, то хули ты от них хочешь?

Как будто у них есть специальный отдел по самым уебанским решениям на свете.
Аноним 21/06/23 Срд 20:40:23 2740907 17
>>2740901
В MS работают самые большие говнокодеры на свете. Это уже 20 лет ни для кого не секрет.
Аноним 21/06/23 Срд 20:46:26 2740910 18
>>2740895
Может после оптимизона значение захешируется и второго приведения не будет. Надо ассемблер посмотреть.
Аноним 21/06/23 Срд 21:19:41 2740968 19
2023-06-2121-19[...].png 4Кб, 370x192
370x192
2023-06-2121-18[...].png 16Кб, 624x462
624x462
Аноним 21/06/23 Срд 21:23:28 2740970 20
>>2740968
Это IR. А надо ассемблер.
Аноним 21/06/23 Срд 21:29:23 2740975 21
>>2740968
У джитера свои оптимизации. Ассемблер в релизе смотри.
Аноним 21/06/23 Срд 21:39:20 2740980 22
>>2740903
Там return виднеется. Значит метод не однострочный, значит написать так ничто не мешало:

>var rk = resourceKey.ToSting();
>return dictionary.Contains(rk) ? dictionary[rk] : null;

И сахарок и оптимизон присутствуют.
Аноним 21/06/23 Срд 22:44:02 2741006 23
>>2740335 →
>Сейчас по моему кроме автофака и майковского уже ничего не осталось актуального. И фич второго хватает в 95% случаев.
"фича" майков только одна - когда они влепили его в асп.нет то использовать там "свой любимый" стало неудобно.
А так DI от майков - просто базовый. Ни тебе декораторов, ни условных иньекций, ни вмешаться в процесс конструирования графа. Простая автофабрика со скоупами.

>>2740797
>Сделал enum таким кастрированным
при этом он хоть и является этаким особым наследником int/byte но работает медленнее
>Нахуевертил эксепшинов там где они нахуй не нужны.
увы но должен быть один подход - либо коды ошибок либо ексепшены. либо это 2 параллельных апи, а кому оно надо
Аноним 22/06/23 Чтв 00:20:41 2741034 24
Аноны, тупой вопрос.
Есть код, начинается стандартно:
using System;
using System.Runtime.InteropServices;

Вопрос: разве "using System" не включает в себя "System.Runtime.InteropServices"? Это же подраздел System? Что я не понимаю?
Аноним 22/06/23 Чтв 00:50:43 2741055 25
>>2741034
Нет не подраздел. Это имя неймспейса. То что оно похоже на иерархию - просто соглашение
Аноним 22/06/23 Чтв 00:50:54 2741056 26
>>2741034
Вот есть у тебя папка "Картинки", в ней лежат пикчи и вложенные папки "Аниме" и "Хуйцы". Когда ты открываешь папку с картинками в проводнике Windows, ты же не видишь в ней пикчи с аниме и хуйцами? Надо отдельно открывать вложенные папки. С неймспейсами почти тот же принцип, разве что иерархия неймспейсов не обязательно соответствует физическому расположению каталогов с исходниками.
Аноним 22/06/23 Чтв 00:56:38 2741058 27
>>2741056
Добра тебе и благополучия, родной!
ОТКУДА ТЫ ЗНАЕШЬ ПРО МОЮ ПАПКУ С ХУЙЦАМИ?!!? ТЫ ХАКИР?!
Аноним 22/06/23 Чтв 00:58:19 2741059 28
>>2741055
Блин, точно, это же неймспейс а не заголовочный файл. Фейспальм.
Си головного мозга.
Аноним 22/06/23 Чтв 01:00:32 2741061 29
Аноним 22/06/23 Чтв 02:55:21 2741078 30
Аноним 22/06/23 Чтв 11:20:24 2741268 31
Джуну на шарпе реально найти работу? А то все что я вижу это требуются мидлы да сеньоры.
Аноним 22/06/23 Чтв 13:47:59 2741372 32
>>2741268
Да, реально. Но учитывай, что на старте зарплата будет в лучшем случае 60К рублей и на собесе придется выложиться как на мидла минимум.
Аноним 22/06/23 Чтв 17:22:08 2741613 33
Win2d или Skiasharp?
Аноним 22/06/23 Чтв 17:31:35 2741624 34
Аноним 22/06/23 Чтв 17:32:17 2741625 35
>>2741624
Нужно написать аналог пэинта с доп. фичами.
Аноним 22/06/23 Чтв 17:34:42 2741627 36
Аноним 22/06/23 Чтв 17:40:40 2741634 37
>>2741627
При чем тут это говно?
Аноним 22/06/23 Чтв 18:36:16 2741709 38
>>2741613
Чем эти говна отличаются от стандартных средств WPF?
Аноним 22/06/23 Чтв 18:53:30 2741735 39
>>2741709
Ну, во первых win2d это библиотека для uwp, а во вторых она работает напрямую с directx, минуя фреймворк, за счет чего достигается крайне высокая скорость работы с графикой.
Аноним 22/06/23 Чтв 18:59:11 2741742 40
>>2741735
А с вектором рабоатет? или только растр?
Аноним 22/06/23 Чтв 19:00:06 2741745 41
>>2741625
Для чего-то конкретного или просто рисовалка?
Аноним 22/06/23 Чтв 19:08:28 2741769 42
Аноним 22/06/23 Чтв 19:08:32 2741770 43
>>2741742
Только растр, насколько я знаю.
Аноним 22/06/23 Чтв 19:11:30 2741778 44
2023-06-2219-10[...].png 12Кб, 455x320
455x320
Аноним 22/06/23 Чтв 19:12:10 2741781 45
>>2741769
Школошарп по школотестам.
Аноним 22/06/23 Чтв 19:22:27 2741807 46
>>2741613
Если поверхностно судить, то судя по всему Skiasharp это чет универсальное, а win2d майкрософтовское.
Очевидно что за универсальность придется платить функционалом или производительностью.

win2d все так же поддерживается и есть для NET.6
Тут вопрос в том, каковы планы анона, и если за пределы шиндоваса не выходят, то я бы выбрал двухмерный вин против школошарпа.

Но опять же, тут нужно навернуть оба говна, чтобы понять в чем нюансы. По себе знаю, что хватает отсутствия одной детали, чтобы перечеркнуть все плюсы.
Аноним 22/06/23 Чтв 20:39:16 2741902 47
>>2741742
Хотя нет, есть и вектор.

Вообще, проблема win2d в том, что документации почти нет. Есть доки на гитхабе https://microsoft.github.io/Win2D/WinUI2/html/Introduction.htm и собственно все, в инете инфы по либе кот наплакал. SkiaSharp же обзавелся большим сообществом и на любой вопрос можно найти ответ.
Аноним 22/06/23 Чтв 20:43:49 2741911 48
Господа, как вижле заставить адекватно работать следующее:
1) Не "съедать" скобку если такая уже стоит справа от курсора.
2) При создание типа переменной не выполнять автоподстановку по нажатию на пробел (ппц гении).
Аноним 22/06/23 Чтв 21:03:26 2741927 49
>>2741911
Чел, все эти проблемы вылезают в 10% случаев. Второе вообще возникает при хреновом именовании собственных объектов.
В попытке борьбы с этими 10%, ты рискуешь обрести гемор с противоположными 90%.
Аноним 22/06/23 Чтв 21:07:05 2741930 50
>>2741902
Надо посмотреть. Я делал все сам, надо было соорудить свой векторный редактор.
Аноним 22/06/23 Чтв 21:08:48 2741931 51
>>2741930
Что для рендеринга использовал?
Аноним 22/06/23 Чтв 21:29:22 2741947 52
>>2741931
Стандартные средства WPF. Конкретно с производительностью проблем не испытал (мб потому что веткор), но вот взаимодействие, типа редактора узлов кривой, выбор объектов, трансформации геометрии, чтение SVG — пришлось самому делать.

Но я щас посмотрел на доки, и даже с виду какая-то залупа. Все эти свойства и методы есть в стандартном Media, кроме читальщика svg или RgbToHue (мне пришлось самому писать конвертеры в различные цветовые схемы, HSV, HSL и CMYK).

В целом раздел эффектов понравился.
Аноним 22/06/23 Чтв 21:47:55 2741971 53
>>2741927
Господи, какие же вы бесполезные.
Аноним 22/06/23 Чтв 22:12:50 2742004 54
>>2741947
WPF медленнее в плане рисования. Приходится кидать винформхост и рисовать уже на нем - сильно производительнее.
Аноним 22/06/23 Чтв 22:25:09 2742010 55
>>2742004
Ну смотря какие у тебя цели.
Насколько я знаю, в винфомрсах тупо красятся пиксели. В WPF у тебя каждый штрих или кривая — это отдельный объект (причем со структурой из сегментов, патчей и фигур с поддержкой булевых операций). Мне нужно было второе, чтобы я мог кривую переместить, повернуть, отмасштабировать, перекрасить.

Зато впф определенно сосет в ричтекстбоксах. Настолько сосет, что сделать какой нибудь редактор кода с подсветкой синтаксиса официально невозможно.
Аноним 22/06/23 Чтв 22:27:10 2742013 56
>>2742010
>это отдельный объект
именно. и когда их очень много, то все очень не очень.

>редактор кода с подсветкой синтаксиса официально невозможно.
да. AvalonEdit тому пример
Аноним 22/06/23 Чтв 22:43:48 2742022 57
>>2742013
>и когда их очень много, то все очень не очень.
Ну дык все графические редакторы вещь тяжелая. Я знаком с векторными редакторами и структура объекта в WPF была очевидной и неизбежной. И в Corel Draw и в Illustrator устроено абсолютно так же.

Возможно для растра этого не нужно, хотя в фотошопе вроде тоже появились всякие blending options, смарт объекты и динамические градиенты, которые подразумевают хранение не только координат штриха, но и что-то еще.
Аноним 22/06/23 Чтв 22:54:14 2742032 58
Аноним 22/06/23 Чтв 22:58:22 2742036 59
>>2742032
Пфф, так в ней ничего по сути и нет. Опять же это растровый редактор, там своя атмосфера.

В векторе такой подход неприемлем, да и WPF все таки ориентируется на вектор. И если мы возьмем Gimp, то там ровно тоже самое, что и в WPF.
Аноним 22/06/23 Чтв 23:18:53 2742051 60
Аноним 23/06/23 Птн 04:26:54 2742191 61
Если уж зашла речь о редакторах, как бы вы реализовали рисование различными кистями? К примеру есть кисть с текстурой карандаша, как сделать, чтобы при рисовании текстура не накладывалась сама на себя множество раз, превращаясь в сплошную линию?
Аноним 23/06/23 Птн 05:12:46 2742198 62
>>2742191
Сделать соответствие координат холста на который рисуешь, с координатами текстуры из которой рисуешь.
Аноним 23/06/23 Птн 14:49:53 2742680 63
>>2742191
>при рисовании текстура не накладывалась сама на себя множество раз, превращаясь в сплошную линию?

Не понял о чем речь. Как у тебя реализована кисть? Если это грубо говоря точки вдоль контура с неким шагом и с неким размытием, то решается это все собственно
1. шагом,
2. текстурой. Она не всегда однотонная именно для этих целей. Если мы говрим об условном шуме, то там есть темные и светыле пятна, при наложении друг на друга никогда не дадут однородынй цвет.
3. радиальным размытием кисти
4. режимом наложения (add, multiply, difference, color burn и т.д.)
https://ru.wikipedia.org/wiki/Методы_наложения_(компьютерная_графика)

Ну а в более сложных подходах (как это было в зибраше) у текстуры есть еще карта высот и на это реагирует свет, создавая ту самую естественную текстуру + учет вектора кривой, чтобы расположить текстуру вдоль собсно кривой.
Вроде на презентации win2d я видел, что можно из коробки рендерить карут высот и выставлять источник света

Но ты заебешь одну эту технологию пилить, если по уму. Я год потратил на своё.
Аноним 23/06/23 Птн 15:23:14 2742729 64
Привет, програмач. Слушай, работаю уже 4+ года, сменил 4 проекта, работал фуллстеком, и постоянно читаю эти ваши метаниты/Рихтеров.

Но всё равно на техническом собеседовании лажаю и упускаю какие-то вроде бы очевидные нюансы теории. Как это фиксить?
Аноним 23/06/23 Птн 16:08:08 2742775 65
>>2742729
>Как это фиксить?
Не читать метанит, который предназначен для совсем маслят?
Вот даже в твоем вопросе нарушение логики. Если что-то спросили и ты не знаешь — выучи это и будешь знать.
Аноним 23/06/23 Птн 16:14:42 2742778 66
1687526080498.png 235Кб, 1632x1526
1632x1526
1687526080502.png 40Кб, 920x453
920x453
>>2742198
Не понял тебя
>>2742680
> Не понял о чем речь. Как у тебя реализована кисть? Если это грубо говоря точки вдоль контура с неким шагом и с неким размытием, то решается это все собственно
Есть точки, есть кисть пик например, сейчас у меня для каждой вычисленной точки использую алгоритм Wu отрисовывается данная текстура, с центром в этой самой точке.
> шагом,
Если увеличить шаг, то линия не будет одной толщины, и в целом не будет плавного рисования, когда штрих следует за курсором. И это в любом случае будет выглядеть не очень, так как наложение так и так будет происходить.

> текстурой. Она не всегда однотонная именно для этих целей. Если мы говрим об условном шуме, то там есть темные и светыле пятна, при наложении друг на друга никогда не дадут однородынй цвет.
Опять же все зависит от частоты.
> радиальным размытием кисти
Как это поможет?
> 4. режимом наложения (add, multiply, difference, color burn и т.д.)
Думал об этом, но в данном случае пространство между брызгами прозрачное как и остальной холст, поэтому хз что здесь можно наложить
Аноним 23/06/23 Птн 16:56:05 2742821 67
bandicam 2023-0[...].mp4 1009Кб, 1032x640, 00:00:23
1032x640
bandicam 2023-0[...].mp4 656Кб, 1032x640, 00:00:12
1032x640
2023-06-2316-38[...].png 39Кб, 227x220
227x220
>>2742778
Чел ... ты видел как устроены кисти в фотошопах, зибрашах?
Если ты подобную монохромную текстуру загрузишь в фотошоп, то будет ровно тоже самое, поэтому шум кисти всегда имеет оттенки, либо не имеет, если зудожник использует кисть для маски.
Сейчас, у тебя текстура не предназначена для твоих целей. Формально, у тебя не текстура, а альфа. Посмотри пикрил текстуоы карандаша, там тон неоднородный — есть светлые и темные участки, которые при наложении не сольются (само собой и альфаканал там должен присутствовать).

Художники обмазаны килотоннами альфа-кистей под разный пук, с разным контрастом, текстурой и масштабом детелей. В Substance Painter к примеру все эти кисти настраиваются процедурно: масштаб "капель", контраст и вообще куча шумов намешано.

> радиальным размытием кисти
> Как это поможет?
Это не твоя забота тащем-та, художник занет зачем. Если вкратце, то блюр может помочь избавиться от "швов" накладывающихся друг на друга паттернов.

> шагом,
> Если увеличить шаг, то линия не будет одной толщины,
Епта, посмотри на настройки кисти в фотошопе и других редакторах. Конечно может и иногда художники это юзают для рисования например швов ниток. Суть в том, что это параметр обязан быть.

Еще раз, ты должен ХУЙдожнику дать набор параметров, а он сам подберет нужную альфу, нужный размер кисти, нужный нажим, нужный блюр, режим Lazy Mouse (это когда кисть реагирует на движения юзера с задержкой — позволяет рисовать плавные изгибы).

Настоятельно рекомендую изучить как все устроено в других приложениях и не городить велосипед. Я тоже сидел и анализировал что и как в разных приложениях устроено. Кажыдй делал так, как считал нужынм.
К примеру в Corel Draw колоприкер реализован через таймер, от чего колорпикер безбожно тормозит в попытках перерисовать контрол с градиентом. В фотошопе колорпикер хитро подменяется на иконку курсора, что позволило повысить избавиться от фризов.

Тут нужна наблюдательность. Установить все программы и смотреть что и как кто сделал.
Аноним 23/06/23 Птн 19:01:30 2742953 68
>>2742191
Как-как?
Выделил бы сущность:
BlendMode

У нее бы был метод
void Apply(DrawEvent e, Canvas c);

DrawEvent - содержит сплайн по которому шло рисование, кисть, размер точек в частях сплайна

Ну, далее, в этом Apply бы и происходила логика с наложением в зависимости от метода наложения. Где-то бы происходило умножение, где-то бы вычитание, где-то бы если уже прошлись по этим координатам - нихуя не делаем.

Как-то так.
Аноним 23/06/23 Птн 19:05:07 2742958 69
>>2742191
Ну а в твоем случае, чтобы просто было - просто накладываем текстуру на весь холст, далее - вычитаем все что не по сплайну прошло.Т.е чирканули - накладываешь текстуру на холст, потом - вычитаешь из того что наложилось сплайн, потом инвертируешь наложение. Тогда текстурка будет равномерно и не перекрывать сама себя.
Аноним 23/06/23 Птн 20:41:53 2743036 70
2023-06-2320-39[...].png 77Кб, 1131x508
1131x508
>>2742958
HUETA
Нужно по-человечески делать текстуру кисти. Ты как это собрался поддерживать? А как же библиотеки кистей? Несовместимы? Идут в жопу?

Берм квадратную альфу кисти, и дальше распределеяем копии по сплайну с неким шагом, учитывая перпендикулярный вектор относительно сплайна.

А пытаться тайлить холст — это провальная идея. Она даже выглядеть будет супер пососно.
Аноним 23/06/23 Птн 20:49:08 2743039 71
>>2743036
> Берм квадратную альфу кисти, и дальше распределеяем копии по сплайну с неким шагом, учитывая перпендикулярный вектор относительно сплайна.
И получаем в местах поворота сплайна наложение текстур при повороте, от которого хотел избавиться чел что спрашивал.

> А пытаться тайлить холст — это провальная идея. Она даже выглядеть будет супер пососно.
Ну, тут зависит. Вполне нормально может выглядеть, если текстура норм. Другое дело, что сильно компуктерно.

А нормальное решение - я предложил изначально постом выше. Выделить блендмод и там порешивать, как че накладывать. Кисть при этом - это отдельная сущность которая несет информацию только о форме, силе нажатия тексткрек, степени размытия краев, наклоне и т.д.
Аноним 23/06/23 Птн 21:04:20 2743049 72
>>2743039
>от которого хотел избавиться чел что спрашивал.
Так надо советы давать не губительные, с этим челвоеки давно уже разобрались. Все гарфические редакторы работают по моему принципу. Все. А с талингом нужно делать бесшовную текстуру, нужно учитывать разрешение экрана, нужна своя библиотека текстур, которая не будет подходить к дурим редакторам.

>Вполне нормально может выглядеть
Я те отвечаю, что будет выглядеть как говно, ибо отсутствует вариативность шума. Как хужожник художнику отвечаю, что юзер при работе постоянно меняет радиус кисти,чтобы создать ту саму вариативность шума.

Если так нужен подобный эффект, то художник сам возьмет текстуру и маской ее обтравит.

>И получаем в местах поворота сплайна наложение текстур при повороте, от которого хотел избавиться чел что спрашивал.
Иногда не стоит идти на поводу претензий. Возможно причина проблемы в другом - в самой текстуре.
Аноним 24/06/23 Суб 14:04:21 2743399 73
Есть ли в c# аналог vb.net модификатора доступа Shadows?
Объясню как он работает. Он затеняет метод\свойство базового класса, но не переопределяет как overrides. Метод в базовом классе по прежнему существует, но не виден при обращении к наследнику.

Обычно такой подход используют для ситуаций, когда элемент базового класса не помечен как overridable (или virtual). Тогда его затеняют, а теле метода обращаются к базовому классу.

Public Shadows Sub Add(item as T)
. . . MyBase.Add(item) //аналог base.Add(item)
End Sub

Как такое сделать в шарпе? Я наследую список, и мне нужно переопределить метод Add.
Аноним 24/06/23 Суб 14:13:07 2743407 74
>>2743399
Если тебе надо что-то перекрыть от базового класса - есть new.

Более правильно будет - сделать класс, который не наследуется. Т.е.:

class MyList<T> : IList<T>{
private List<T> _list;

// реализация интерфейсов как тебе надо.

}
Аноним 24/06/23 Суб 14:20:15 2743413 75
>>2743407
Да, спасибо.

>Более правильно будет - сделать класс, который не наследуется
Да мне там надо всего пара методов поправить, чтобы он добавлял в итем себя в качестве родителя.
Аноним 24/06/23 Суб 16:07:30 2743475 76
Пипец у вас шарп на изичах. Сам дописывает и что удивительно правильно дописывает. Даже умеет анализировать имя переменной и подставляет нужный метод.
24/06/23 Суб 16:15:56 2743491 77
Аноним 24/06/23 Суб 16:34:03 2743505 78
>>2743475
Я бы кстати эту фичу отключил бы, если бы знал как. Лично для меня - она чаще мешает. Я привык как раньше - хуячишь, потом мышечной памятью выбираешь че там intellisense предложит выбирать. А теперь так делаешь - и в результате у тебя не то что надо, приходится назад исправлять. Бесит.
Аноним 24/06/23 Суб 17:00:21 2743530 79
>>2743491
Студя конечно, но для бейсика таких штук нет - там только базовое автодополнение.
Аноним 24/06/23 Суб 17:05:10 2743536 80
>>2743530
Ну да, бейсик же мёртв.
Аноним 24/06/23 Суб 18:00:38 2743560 81
>>2743505
Да ну.
Мне например нравится, что когда инжектишь сервисы, она тебе сразу и ридонли поле полностью прописывает и параметр конструктора и сразу связывает их, причем с именами по кодстайлу. Удобна.
Аноним 24/06/23 Суб 18:38:26 2743572 82
Подскажите по проблеме плиз. Есть edmx, database first. Мне нужно поудалять свойства из EntityType, так как их дохера и мапинг занимает кучу времени. Удаляю - выдает ошибку 3023. В чем ошибка-то, если я удалил эти свойства из модели, почему от меня требуется, чтобы я указал сопоставление? И как вообще сделать так, чтобы в таблицах, добавленных из бд, было только несколько нужных мне свойств, а не все 100?
Аноним 24/06/23 Суб 18:39:05 2743573 83
111.JPG 95Кб, 1360x548
1360x548
222.JPG 33Кб, 1202x276
1202x276
Аноним 25/06/23 Вск 03:07:39 2743784 84
>>2743572
Хуй знает, никогда не работал с database first.
Но чисто по логике и исходя из сообщения об ошибке, оно похоже ругается из-за того что свойство в БД не nullable и он не сможет его отрезолвить при обратной записи в БД.
Сделай столбец в БД nullable или задай ему дефолтное значение.
Аноним 25/06/23 Вск 09:06:43 2743825 85
zoomer-eating-t[...].gif 391Кб, 652x562
652x562
Сап хуйтишники, крч решил я это омгмгм вкатиться в этот ваш закрытый гей-клуб на C#, так сказать язык для элит. Но мне нужно чисто так, для юнити, я просто недавно такой проснувся и понял, что я Кадзима-Гений и мне срочно нужно запилить свой шедевр российского геймдева. Ну крч, я туповат и в школке на паскале прям тупил постоянно, чё то для меня слишком много букаф и цифр было на клавиатуре. Но в институте я "паумнел"(учусь на ЫНЖЕНЕРА) и стал любителем Софии. И крч я понял что ООП это типа философия на минималках. И прям щас на изичах хаваю учебник "че-то там изучем си шарп хуярим игры для унити 5 издание"(кста норм учебник?). Но к чему это я. Какие вообще есть пути дальнейшего развития на этом языке? Мне просто прям чёт вкатывает вся эта ваша залупная хуйня для задротов комнатных.
Аноним 25/06/23 Вск 09:58:06 2743864 86
>>2743825
Если минимальная база по программированию имеется, то советую свой проект пилить, не важно на сколько это будет хуево и убого. На этом будешь учиться. Постоянный гуглежь и вопросы к gpt чату в помощь. Параллельно можешь читать что-то самое примитивное, для совсем вкатунов по твоему направлению. Вроде были раньше советы по книгам в шапке, но проебались. Загугли книжки сам. Бери самую простую и популярную.

Когда мало-мальски прошаришься во внутренние кухне направления и фреймворка. Ищи форумы, обсуждачи, группки и тд где такие же как ты сидят, только поопытнее. Сиди там ридонли, ну или базарь, как хочешь. И становись челом который про разработку реальных игра что-то знает. Про первый совет не забывай - постоянно что-то пиши, заимствуй любой код, который делает что-то прикольное, изучай его в отладке чтобы понять как он работает и тд.

Чтобы не забить на все это дело, нужна нихуевая мотивация время свое просирать непонятно на что. Так что если осилишь базу своего направления, то ищи челов, которым нужен прогер-разраб любой хуевости для своего гавно-инди. Примыкай к таким и развивайтесь вместе. Ничего из этого не выйдет скорее всего, но ты получишь опыт и знания.

Если базы нет, то сперва придется вкатиться в программирование. Не важно на каком языке. Иди учи язык, тот же шарп, по видосам с ютуба. Когда сможешь сам осилить самую простейшую консольную хуйню из задачников, то смотри первый совет.
Аноним 25/06/23 Вск 17:03:19 2744189 87
Почему я не могу в out передать свойство класса?

internal class MyClass
{
. . public DateTime MyTime { get; set; }

. . public MyClass(string data)
. . {
. . . . bool isSuccess = ParseTimeData(data, out MyTime);
. . }
}
Аноним 25/06/23 Вск 17:11:33 2744195 88
Аноним 25/06/23 Вск 17:17:35 2744197 89
>>2743825
Делаешь собственный проект и по ходу понимаешь где соснул. Я свой уже четвертый раз переделываю (за полтора года), узнавая что-то новое. Иначе никак.

Я тут недавно от одного чела узнал базу, с которой я внезапно согласен — проект должен быть объемным и долгосрочным. На микрописюльках просто нет шансов узнать что-то новое.

Единственный минус такого подхода — твоя собственная сила воли. Я как любитель игр жанра выживач, обожаю аутировать и в целом не против длинных марафонов да потом еще все переделать заново.
Аноним 25/06/23 Вск 17:18:44 2744199 90
2023-06-2517-16[...].png 5Кб, 777x87
777x87
Аноним 25/06/23 Вск 17:32:08 2744213 91
>>2744195
Ты врун. Свойство по сути является мотодом, поэтому не работает в качестве передачи переменной. Алсо в бейсике работает, но компилятор достаточно умен, чтобы потом оптимизировать и подставить временную переменную.
Аноним 25/06/23 Вск 17:42:41 2744216 92
>>2744213
>Алсо в бейсике работает, но компилятор достаточно умен, чтобы потом оптимизировать и подставить временную переменную.
И нахуй ломает всю инкапсуляцию.
Аноним 25/06/23 Вск 19:28:37 2744269 93
>>2744197
Я хочу сделать в жанре survival horror в духе ps1-ps2 игр(RE, Тихие Холмы). Голливудский сюжет уже запилил в своей голове.
Я так-то заходил на геймдемовские гейские ру форумы . Но чет разочаровался в таможних аутистах делающие говно игры на унити. У челов реально нет фантазии. Какое-то однотипное и скучное говно а не игры. Слишком дохуя НПС пытающиеся пилить игрули своей мечты. Ну справедливости ради походу не каждому дано быть псевдотворцом Кадзимой.
Аноним 25/06/23 Вск 19:51:24 2744287 94
>>2744216
Ну и каким же образом ломает?
Аноним 25/06/23 Вск 20:20:02 2744311 95
>>2744287
Не ломает, просто захотелось спиздануть хуйню с умным видом и заодно выебнуться на бейсик.
Аноним 25/06/23 Вск 21:07:53 2744336 96
>>2744269
>нет фантазии. Какое-то однотипное и скучное говно а не игры
какая фантазия может быть. ты их жизнь видел? они ЖИЗНЬ пилят. Вот из свежего - "симулятор жизни в хрущевке". А ты со своими фантазиями в жизнь лезешь. Ничего не понимаешь
Аноним 25/06/23 Вск 21:48:39 2744360 97
>>2744336
>какая фантазия может быть. ты их жизнь видел?
Так лол, а сильно ли отличается жизнь желтолицых?) Почему они могут высерать хотя бы поверхностного говно, берущее атмосферой и визуалом, а наши Васьки нет?)
Аноним 25/06/23 Вск 22:11:31 2744365 98
Слушайте, а вот такой вопрос. Стоит ли читать какие-то книги? У меня под рукой лежит Рихтер, но там по версии фреймворка 4.5.
По сути, большая часть того, о чем он пишет, есть на msdn в более актуальной форме или даже на тех же метанитах.

Я понимаю, читать какую-то не привязанную к технологиям классику вроде "Грокаем алгоритмы". С другой стороны, хочется рассказывать теорию как сеньор-помидор, а не отталкиваться от практики.
Аноним 25/06/23 Вск 22:29:11 2744374 99
>>2744365
Я хуй знает как челы вообще не читают.
Аноним 25/06/23 Вск 23:05:34 2744390 100
>>2744365
Стоит. Интересны не какие-то книги на обобщенные темы (это с легкостью заменят туторы на ютубе и msdn), а когда обсасывают конкретную тему.

Я полгода ругался на WPF, словари ресурсов, на все это убожество (как я считал), выстраивал безумные теории, изобретал квадратные колеса, по сути ухудшая себе положение нарушением соглашений, да и аноны ИТТ в основном заднеприводные и про фронтенд не особо знакомы. А в книгах есть такие нюансы, которые строят объемную картину по конкретной тематике.

Не скажу, что я знаю всё, но в 10 раз больше, чем описано в мдсн, метанитах и туторах на ютубе.
Аноним 26/06/23 Пнд 04:47:01 2744440 101
>>2744390
Намеренная политика, когда эффективно пользуется системой только её разработчик и приближенный, а остальные барахтаются в говне не понимая что делают, это дает конкурентное преимущество майкрософт. Эту обфускацию довели до того, что теперь без нейросети не поймешь даже с какой стороны подходить. Но и нейросети манипулируемы, их можно заставить выдавать неактуальные данные, а настоящие придерживать для себя.
Аноним 26/06/23 Пнд 08:29:02 2744467 102
Объясните почему на метаните тема перегрузки методов в разделе классы и структуры а скрытие методов в разделе ООП?
Аноним 26/06/23 Пнд 08:35:46 2744469 103
>>2744467
А где им еще быть. Оно там и должно.
перегрузки это не фича ооп, это диспетчеризация методов.
А сокрытие это уже инкапсуляция - один из китов ооп. Структуры же - хитрожопые подобия классов со своими премудростями
Аноним 26/06/23 Пнд 08:59:56 2744475 104
>>2744469
Разве не полиморфизм?
Аноним 26/06/23 Пнд 09:16:11 2744479 105
>>2744390
>Стоит. Интересны не какие-то книги на обобщенные темы (это с легкостью заменят туторы на ютубе и msdn), а когда обсасывают конкретную тему.
>
Что посоветуешь?
Аноним 26/06/23 Пнд 09:16:37 2744480 106
>>2744475
смотря что ты подразумеваешь под перегрузкой методов
Аноним 26/06/23 Пнд 12:17:07 2744688 107
>>2744467
Ты бы с этим вопросом к создателю ресурса и обратился. Метанит - это не какой-то академический справочник сделанный по всем канонам, а просто ресурс одного чувака, который начал когда-то для себя систематизировать материалы и не смог остановиться.
Аноним 26/06/23 Пнд 14:05:50 2744796 108
>>2744688
Тащемто, метанит очень хуёвый источник информации. Утверждаю, как прошедший через эти говна.
Аноним 26/06/23 Пнд 16:19:54 2744978 109
>>2744796
А какой не хуевый? Хотя бы на уровне джуна.
Аноним 26/06/23 Пнд 16:57:03 2745007 110
А в шарпе есть оператор "And Also"? В этмо случае сперва проверяется первый операнд и если он уже вернул False, то второй операнд не будет даже проверяться.
Аноним 26/06/23 Пнд 17:24:31 2745044 111
Аноним 26/06/23 Пнд 18:38:11 2745170 112
>>2744796
Если использовать в режиме "Бля, как же эта хуйня называется/кодится. Вот бля, забыл" По быстрому посмотреть и вспомнить. Вобщем как сборник заметок, которые пролистать проще, чем в МСДН ковыряться.
Аноним 26/06/23 Пнд 18:53:13 2745191 113
А где старая шапка, которая очень объемная такая была? Там еще много полезной литературы было по возрастанию сложности. Куча всяких ресурсов и прочего. Почему её убрали?
Аноним 26/06/23 Пнд 19:07:35 2745208 114
>>2745191
Там большинство уже устарело и для начинающих будет просто вредно.
Аноним 26/06/23 Пнд 19:56:41 2745266 115
Сап, дотнетач, кто-нибудь сталкивался с проблемой рандомно перестающего слушать запросы Кестрела/контейнера Докера?

Есть приложение, которое разворачиваю в Докере, сначала всё ок. Но если подождать какое-то рандомное время и попробовать отправить запрос, то в ответ будет нихуя. Само приложение при этом точно работает, один фоновый сервис в лог пишет в нём. Если перезагрузить контейнер, то всё снова будет ок, но заёбывает. Гуглил проблему, нашёл что-то типа такого: https://github.com/dotnet/aspnetcore/issues/45215, но у меня дотнет 6. Единственное: у меня нет launchsettings.json в проекте, конвертил его из консольного в WebApi и как-то забил на это, вроде и так работает
Аноним 26/06/23 Пнд 22:38:26 2745504 116
2023-06-2622-34[...].png 9Кб, 613x130
613x130
maxresdefault.jpg 63Кб, 1280x720
1280x720
Зачем в шарпе методу нужен ридонли? Кто ему присвоит значение? Он же метод без параметров!
Аноним 26/06/23 Пнд 22:42:16 2745506 117
>>2744479
Не знаю. То, что тебе лично нужно. У меня были проблемы с WPF, а еще анон мне тут посоветовал книжку про Dependency Injection.
Аноним 26/06/23 Пнд 22:55:16 2745516 118
>>2745504
Чтоб кумпилятор хардкодил всю хуйню.
Аноним 26/06/23 Пнд 23:09:00 2745529 119
Промониторил вакансии у меня в стране. На сишарп почему-то мало откликов. Около 50. На джаву по 200-300. Почему так? Стоит ли вкатываться в сишарп в таком случае раз никто не идет туда? Хочется успеть на поезд пока пиздец с вакансиями еще не докатился до моей страны
Аноним 27/06/23 Втр 00:33:22 2745580 120
>>2745516
Пипец. 23-й год на дворе, а мне еще на SO и другие погромисты втирают что-то про "да не парься, компилятор оптимизирует лучше тебя".

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

Нахуй и в пизду. Не доверяю я этому вашим оптимизациям. Они странные. С одной стороны "не парься" а с другой залупа, вроде "нельзя передать метод в out" или "помечай метод ридонли".
Аноним 27/06/23 Втр 00:38:03 2745585 121
>>2745529
Не стоит вкатываться в сишарп. На сишарп мало откликов. Около 50. На джаву по 200-300. Если вкатишься, что не успеешь на поезд, а ведь скоро пиздец с вакансиями докатится до твоей страны.
Аноним 27/06/23 Втр 00:54:00 2745592 122
>>2745585
Песню про поезд и пиздец с вакансиями я ещё в 2016 слышал. Теперь вот прям точно ВСЁ? Следующего ещё большего ВСЁ не ждать? Прям точно-точно?
Аноним 27/06/23 Втр 02:14:48 2745613 123
>>2745580
ну сегодня ты не сделал readonly и "пусть компилятор выведет" - завтра ты метод изменил и не учел его ридонлитость, и компилятор вывел что "он не ридонли" - только теперь ты об этом не знаешь. Так что помимо опитимизаций все эти гарантии еще проверяются - readonly, scoped кое как защищают тебя от некоторой стрельбы по ногам по причине "я ж не слон все помнить"

в шарпе еще и val не хватает к var. Но это ж шарп - тут много чего сделали через жопу.

Взять хотя бы тут не раз упоминаемые делегаты и LINQ, когда передавая ламбду все хорошо, но стоит передать Method Group, так сразу "радость" GC
Аноним 27/06/23 Втр 02:54:18 2745617 124
>>2745266
У меня было что в линухе висит слушаемый порт, процесс вроде тоже жив, а байты будто в трубу улетают. Решилось заменой дедика то есть в моём случае была проблема с осью/железом
Аноним 27/06/23 Втр 02:55:18 2745618 125
>>2745580
А ты кто такой, сука, чтобы в компиляторе сомневаться?
Рофлю слегка.
Аноним 27/06/23 Втр 06:08:57 2745631 126
Аноним 27/06/23 Втр 08:31:45 2745662 127
27/06/23 Втр 12:45:55 2745914 128
>>2745613
> завтра ты метод изменил
Во-первых, это не так-то просто сделать, т.к. вероятно этот метод уже используют. Поэтому изменение сигнатуры вызовет ошибку.

В-вторых, учитывая глобальные изменения по решению первого пункта, это будут осознанные изменения, и совершенно очевидно что с этого момента метод и не должен быть ридонли.

Хорошо. Допустим, что я добавил optional параметр, и объекты вызывающие этот метод условно говоря ничего не заметят, и компилятор не выдаст никаких ошибок. Но какой для меня имеет смысл факт того, является ли метод ридонли или нет? Оптимизация? Ну и какая там потеря производительности? Байтоебство на пустом месте (чем рекомендуют не заниматься успешные шарп-господа).

Вообще забавно как шарп пытается усидеть на двух стульях "серьезности языка" и "юзер френдли сахарка".
Аноним 27/06/23 Втр 14:27:33 2746002 129
>>2745914
Структуры существуют для оптимизации. Если ты вместо класса выбираешь структуру, то значит тебе важно байтоебство (иначе о чем мы сейчас говорим)

Далее этот кейворд нужен если у тебя мутабельная структура (и если она такая значит тебе так надо) . А мутабельная структура обладает таким свойством что попав в ридонли семантику компилятор не будет делать обширные изыскания (что ненадежно), а просто влепит защитную копию
И получишь ты оверхед на ровном месте
Аноним 27/06/23 Втр 15:27:21 2746070 130
Привет, программач. Начал учить C#, пока дается относительно легко, т.к. в школе задрачивали питоном для огэ/егэ.
Начал читать "C# Для чайников", но столкнулся с тем, что около половины не понимаю/понимаю плохо, но да похуй, не в этом суть.

Вопрос вот в чем, шарпы используются в вебе, играх и приложениях. Душа у меня к вебу вообще не лежит, ближе к играм или приложениям(желательно играм), насколько сложно найти работу и сколько примерно займет изучение БАЗЫ для среднестатистического вкатуна?
Аноним 27/06/23 Втр 15:35:06 2746084 131
>>2746070
>C#, пока дается относительно легко
>но столкнулся с тем, что около половины не понимаю/понимаю плохо
Ты противоречия в своих словах не видишь?

>сколько примерно займет изучение БАЗЫ для среднестатистического вкатуна
От полугода. С учетом вышеозвученного я бы сказал год-два.
А на поиск

>насколько сложно найти работу
Еще полгода-год приплюсуй к сроку освоения. Хотя может банально повезти ну или ты согласишься работать совсем за еду (но и на такие места тоже очереди бывают)
Аноним 27/06/23 Втр 15:37:52 2746086 132
>>2746084
>Ты противоречия в своих словах не видишь?
да увидел, не дописал малек.
с той же базой огэ/егэ все понятно, проблемы скорее с чем-то сложнее школьного курса типа ООП, функций(в питоне они как-то легче давались)

>или ты согласишься работать совсем за еду
если будет возможность не ездить куда-то то вполне готов и так работать, стаж лишним не будет, чтобы потом устроиться на место получше
Аноним 27/06/23 Втр 18:40:10 2746349 133
>>2745529
На джаве порой такой легаси кал из солянки разных либ, что даже если будут платить в два раза больше, ты убежишь.
Я серьезно, повезет даже если на какой-то древний спринг попадешь.
Аноним 27/06/23 Втр 19:25:07 2746434 134
>>2746086
>проблемы скорее с чем-то сложнее школьного курса типа ООП, функций(в питоне они как-то легче давались)
Ну так это база и есть, а то что знаешь ты, так - букварик.

>если будет возможность не ездить куда-то то вполне готов
Залететь на первую работу сразу на удаленку, шаеес где-то 1 к 20. Даже за еду.
Аноним 27/06/23 Втр 19:44:22 2746467 135
Какие направления в шарпе жизнеспособны в снг и в мире? Веб, десктоп?
Аноним 27/06/23 Втр 19:46:16 2746471 136
Аноним 27/06/23 Втр 19:51:42 2746478 137
>>2746471
А между вебом и десктопом, что выбрать новичку?
Аноним 27/06/23 Втр 20:03:13 2746490 138
Аноним 27/06/23 Втр 20:06:00 2746492 139
А вот допустим мне надо авторизоваться на сервере, а где хранить логин и пароль? Не в текстовом файлике же?
Аноним 27/06/23 Втр 20:10:17 2746499 140
>>2746492
В безопасном зашифрованном хранилище кредов.
Аноним 27/06/23 Втр 20:12:45 2746502 141
>>2746492
>Не в текстовом файлике же?
Почему же?
Аноним 27/06/23 Втр 20:18:59 2746511 142
>>2746490
Глянул вакансии там написано алгоритмическая подготовка и структуры данных, не все же учить, это довольно обширная тема, что чаще всего используется в разработке из этих тем?
Аноним 27/06/23 Втр 20:24:47 2746521 143
>>2746511
Сортировка, поиск, списки, множества, хеш-таблицы, деревья. Ну и надо понимать алгоритмическую сложность.
Аноним 27/06/23 Втр 20:26:43 2746523 144
Аноним 27/06/23 Втр 21:36:46 2746605 145
>>2746434
Понял, тогда постараюсь с этим буквариком дотянуть до ооп.
"За еду" в понятии наносеков это сколько? Я типа не привередливый особо тыщ 20-40 вполне хватит на первое время.
Аноним 28/06/23 Срд 01:47:56 2746714 146
>>2746605
Мои первые 2 месяца были 35 дальше 45 и уже вверх спустя пол года
Аноним 28/06/23 Срд 09:54:32 2746824 147
>>2746521
>Сортировка, поиск, списки, множества, хеш-таблицы, деревья.
Разве это не реализовано в библиотеках, а за попытки костылять вручную не выгоняют с работы ссаными тряпками?
Аноним 28/06/23 Срд 09:58:06 2746826 148
Аноним 28/06/23 Срд 11:40:37 2746897 149
>>2746714
А фриланс, как я понимаю на любом яп это веб в основном?
Аноним 28/06/23 Срд 15:02:13 2747255 150
>>2746824
>Разве это не реализовано в библиотеках
В библиотеках даны обобщенные решения, которые для некоторых частных случаев могут уступать в эффективности в разы.
Аноним 28/06/23 Срд 15:13:41 2747270 151
Возможно ли как-то перехватить исключения, выброшенные в async void методе?
Аноним 28/06/23 Срд 16:05:29 2747314 152
>>2747270
Можно отловить в самом методе
Аноним 28/06/23 Срд 16:13:16 2747330 153
>>2747314
Это то понятно, а какие нибудь глобальные перехватчики для этого есть?
Аноним 28/06/23 Срд 18:09:25 2747486 154
>>2746824
Удивительно как мало это все реализовано
Сплошные велосипеды
Аноним 28/06/23 Срд 18:09:25 2747487 155
>>2747330
Есть но я не помню точные названия. Так и загугли их там два точно есть
Аноним 28/06/23 Срд 18:26:49 2747509 156
Аноним 28/06/23 Срд 18:47:18 2747541 157
Теоретически возможно проверить сигнатуру вызываемого метода в рантайме и если он асинхронный пустой, то его реализацию можно подменить. Для этого берут библиотечку, которая умеет генерить ил программно и реализацию проблемного метода окружают трай кечем.

Получается что-то вроде этого:

>private static MethodInfo WrapMethodWithTryCatch(MethodInfo method)
>{
> // Получаем метод тела оригинального метода
> MethodBody methodBody = method.GetMethodBody();
>
> // Получаем IL-код оригинального метода в виде массива байтов
> byte[] ilCode = methodBody.GetILAsByteArray();
>
> // Создаем динамический метод, который будет содержать обертку try-catch
> DynamicMethod dynamicMethod = new DynamicMethod(
> method.Name + "_Wrapped",
> typeof(void),
> Type.EmptyTypes,
> typeof(Program).Module);
>
> ILGenerator il = dynamicMethod.GetILGenerator();
>
> // Вставляем начало блока try
> il.BeginExceptionBlock();
>
> // Вставляем IL-код оригинального метода в динамический метод
> for (int i = 0; i < ilCode.Length; i++)
> {
> il.Emit(ilCode);
> }
>
> // Вставляем конец блока try
> il.BeginFinallyBlock();
> il.EndExceptionBlock();
>
> // Вставляем return
> il.Emit(OpCodes.Ret);
>
> // Создаем делегат для динамического метода
> MethodInfo wrappedMethod = dynamicMethod.CreateDelegate(typeof(Action)) as MethodInfo;
>
> return wrappedMethod;
>}

На деле все немножко сложнее. Я видел доклад где демонстрировался рабочий код.

В любом случае пидарасу который допустил существование async void в безопасном шарпе уготован особый котел.
Аноним 28/06/23 Срд 18:56:21 2747557 158
>>2747509
> https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.unhandledexception
Вот это не перехватывает
> https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.firstchanceexception
А это перехватывает вообще все, в том числе ошибки в стандартных либах. Всего за минуту после запуска приходит пара сотен исключений и понять, какое из них привело к крашу невозможно.
Аноним 28/06/23 Срд 19:04:13 2747563 159
>>2747541
Кек, прикольно. Запомню, как минимум можно будет на собесе мозг оппоненту вынести.
Аноним 28/06/23 Срд 19:06:21 2747566 160
>>2747557
Все он перехватывает. Совсем недавно с асинк войдами в пользовательском коде ебался.
Аноним 28/06/23 Срд 19:07:54 2747569 161
>>2747566
У меня не перехватывает.
Аноним 28/06/23 Срд 19:09:57 2747573 162
>>2747569
Завтра еще раз проверю.
Аноним 28/06/23 Срд 19:36:13 2747617 163
Тут ведь есть эксперты wpf, подскажите, как пофиксить лаги анимации перемещаются несколько десятков картинок внутри scrollviewer ?
Аноним 28/06/23 Срд 19:42:10 2747623 164
>>2747617
WTF лагает. Прими это как факт. Это не пофиксить.
Аноним 28/06/23 Срд 19:44:31 2747626 165
>>2747623
Печаль. Видимо все таки придется мигрировать на uwp
Аноним 28/06/23 Срд 23:34:39 2747811 166
2023-06-2823-30[...].png 14Кб, 1502x140
1502x140
Это что такое вообще? Почему я не моуг вернуть таск типа лист?
Аноним 28/06/23 Срд 23:40:00 2747819 167
>>2747811
Сссссука как же заебал этот internal. Что за ублюдок рпидумл ставить его автмотом для библиотеки классов? Разве это не подразумевает, что я 999999% случаев буду использовать снаружи проекта?
Аноним 28/06/23 Срд 23:42:29 2747823 168
Аноним 29/06/23 Чтв 00:10:20 2747854 169
Аноним 29/06/23 Чтв 04:29:50 2747908 170
>>2747557
еще есть
TaskScheduler.UnobservedTaskException
Аноним 29/06/23 Чтв 04:41:31 2747912 171
>>2747908
Нахуя столько обработчиков плодить...
Аноним 29/06/23 Чтв 04:54:52 2747913 172
>>2747912
чтобы ты имел больше обработчиков которые не срабатывают )
Аноним 29/06/23 Чтв 06:47:31 2747925 173
>>2747541
>существование async void в безопасном шарпе уготован особый котел
критикуешь предлагай замену
Аноним 29/06/23 Чтв 17:10:06 2748352 174
>>2747623
Но как так? Ведь его выпустили в 2007, когда железо было на несколько порядков слабее. И учитывая его популярность работал он нормально. А тут 2023 на дворе, мощные процессоры, мощные видеокарты, а он лагает как сука, не может простейшую анимацию с translate x плавно вывести, каждую секунду какие-то подергивания.
Аноним 29/06/23 Чтв 17:23:59 2748362 175
>>2748352
Ах, я даже пытался делать анимацию через собственный контрол, вызывая метод onrender с помощью таймера 60 раз в секунду и рисуя картинку в нем. Но даже так меня ждали все те же микролаги.
Аноним 29/06/23 Чтв 17:53:00 2748398 176
2023-06-2917-48[...].png 29Кб, 794x248
794x248
2023-06-2917-46[...].png 47Кб, 1251x293
1251x293
А как сделать Api-реквест на удаление с параметрами запроса?

Пикрил 1 - информация о запросе в документации. Ссылка: https://cloud.yandex.ru/docs/resource-manager/api-ref/Folder/delete
Пикрил 2 - это то, что у меня работает без query parameters
Пикрил 3 - это то, как я попытался впихнуть параметр запроса "deleteAfter".
Аноним 29/06/23 Чтв 17:53:35 2748400 177
2023-06-2917-31[...].png 62Кб, 915x698
915x698
>>2748398
Пикрил 1 отвалился.
Аноним 29/06/23 Чтв 17:59:05 2748405 178
>>2748398
Если не ограничен в либах то советую юзать flurl. Базарю ещё захочешь
Аноним 29/06/23 Чтв 17:59:05 2748406 179
>>2748398
>>2748400
Поспешил, затупил. Забыл добавить косую черту между folders и folderId.
Аноним 29/06/23 Чтв 18:01:50 2748408 180
>>2748405
Ок, спасибо. Ща посмотрю.
Аноним 29/06/23 Чтв 18:16:41 2748414 181
Суть.

Возникла острая необходимость генерировать типы в рантайме.

Загуглил, базово сделал.

Теперь - возникла необходимость генерировать у этих типов женерик методы.

Гуглил-гуглил, не нашел как делать, чтобы оно интерфейсу удовлетворяло.

Собственно, в чем проблема то.
Есть интерфейс, есть класс, который ему удовлетворяет, но не имплементирует.
Шарп в утиную типизацию - не может из коробки.
dynamic использовать - не хочется.
Делал велосипед.
Споткнулся о женерики.

Кто шарит, поясните, как сделать?
Аноним 29/06/23 Чтв 18:25:14 2748416 182
>>2748414
В связи с чем такая необходимость?
Аноним 29/06/23 Чтв 18:31:55 2748419 183
>>2747908
Не работает с асинк войдами.
Аноним 29/06/23 Чтв 18:55:52 2748430 184
>>2748416
Ну, вот говорю же.

Есть класс в сборке, которая из DLL подгружается.

Я не хочу все эти вот GetMethod("Zalupa") и прочее делать.
О dll я знаю только место где она лежит, при этом загружать ее в проект и связывать - не хочу, суть как раз в том, чтобы можно было добавлять новые ДЛЛ и динамически подгружать из них нужные штуки.
В сборке так же - нету какого-то общего интерфейса. Ну, вот так вот, в этом тоже задумка.

Теперь. Чего хочу. Хочу чтобы можно было:

var zalupaType = externalAssembly.GetType("ZalupaType");
object instance = Activator.CreateInstance(zalupaType);

IZalupa zalupa = Utils.ToProxy(instance, typeof(IZalupa)) as IZalupa;

Это я сделал.

Но ВНЕЗАПНО, я обнаружил, что в шарпе есть женерики. И интерфейсы могут объявлять женериковые методы. А как мне женерики делать со всей это илогенерацией - я не знаю(((
Аноним 29/06/23 Чтв 19:18:12 2748442 185
>>2748419
Что удивительно ибо если погуглить то пишут что именно им и ловить нужно
Но да, не ловит

Но вообще правильно что не ловит
А ловит только system.appdomain.unhandledexception

Если используешь подход fire and forget то обязан думать про "а если ошибка то что". И если не подумал то fail fast правильнее чем непонятно что
Аноним 29/06/23 Чтв 19:21:26 2748444 186
>>2748430
А потом ты еще не просто с дженерик типами, а с коллекциями дженериков столкнешся. Похэвишь фан, как говорится.
Аноним 29/06/23 Чтв 19:35:48 2748460 187
>>2748442
>А ловит только system.appdomain.unhandledexception
Чел, ты заебал, нихуя он не ловит.
Аноним 29/06/23 Чтв 19:37:45 2748465 188
>>2748460
Я другой чел
И он ловит на дотнет 7 у меня
Аноним 29/06/23 Чтв 19:43:41 2748472 189
>>2748444
А чем оно будет принципиально отличаться?

У меня есть интерфейсы:
public interface I1{
public T Foo<T>();
}

public interface I2{
public IEnumberble<T> Bar<T>();
}

Есть классы:

public class A{

public T Foo<T>(){}
public IEnumberble<T> Bar<T>(){}

}


public class B{

public T Foo<T>(){}
public IEnumberble<T> Bar<T>(){}

}

Я хочу в своем коде иметь возможность сделать:

var a = new A();
var b = new B();

var list = new List<I2>
{
(Utils.ToProxy(a, typeof(I2)) as I2),
(Utils.ToProxy(b, typeof(I2)) as I2)
};


Тут же никакой принципиальной разнцы не возникает.


Сама проблема - из-за того что A и B - из внешних сборок, а какого-то общего интерфейса у них нет, но я заведомо знаю, что они-то под него подходят. Хочу, соответственно - работать с ними через этот общий интерфейс.


Ну да ладно. Видимо придется дальше курить че там с TypeBuilder'ом еще сделать можно, чтобы оно работать нормально стало.
Аноним 29/06/23 Чтв 20:22:13 2748486 190
>>2748442
В этом эвенте можно захендлить исключения с неразвернутых тасок, в момент когда уборщик мусора их диспозит.

Асинк войдовые исключения ничем не хендляться.
Аноним 29/06/23 Чтв 20:24:15 2748487 191
>>2748460
Может кто-то их хендлит за тебя? Потому в unhandledexception'е они и не высплывают.
Аноним 29/06/23 Чтв 20:26:02 2748489 192
2023-06-2920-24[...].png 7Кб, 484x181
484x181
>>2748405
Интересно. Алсо прихуел с неявного создания объектов в шарпе. Мне кажется это уже перебор.
Аноним 29/06/23 Чтв 20:39:12 2748498 193
Анончики, а как быстро в этом вашем шарпе тесты работают? Помню где-то полгода-год назад анон в мвп-треде показывал скринкаст как он запускает тесты и они буквально за пару секунд прокатываются... это +/- всегда так? А то у меня в питухоне две сотни тестов минуту-две крутятся (веб дрисня, тесты по типу "дёрни эндпоинт и сравни тело ответа с тем что должно быть", но есть десяток-другой более тяжёлых которые тестовую бд грузят), вот и стало интересно...
Аноним 29/06/23 Чтв 20:40:25 2748500 194
Аноним 29/06/23 Чтв 20:49:09 2748516 195
Аноним 29/06/23 Чтв 20:58:17 2748521 196
>>2748516
Тебе один из методов расширения объект вернул. Об этом явно его сигнатура говорит. Неявное это когда у тебя что-то боксится и ты про это не узнаешь, если ил не посмотришь.
Аноним 29/06/23 Чтв 21:05:20 2748526 197
2023-06-2920-59[...].png 6Кб, 869x122
869x122
>>2748521
Какой он объект вернул? ни var, ни new ... не сообщают об этом.
Кроме того, в документации буквально написано impicitly create (пикрил).
Обычно при создании экземпляра явно указывают либо слева либо справа тип объекта. А то что ты пишешь — это уже моча уровня джава скрипта (наведи мышкой на перменную и прочитай тип), даже в бейсике такое зашквар.

Тьфу ...
Аноним 29/06/23 Чтв 21:16:59 2748535 198
>>2748526
Обычный сахарок. Не нравится вар попроси студию указать тип вместо вара. Это делается в два нажатия.
Аноним 29/06/23 Чтв 21:26:21 2748541 199
.png 2Кб, 277x83
277x83
.png 7Кб, 394x124
394x124
>>2748526
Чел. Когда ты используешь методы класса, ты так же кричишь про неявное?

Ну а хули, где там явно сказано, что за len будет?
Аноним 29/06/23 Чтв 21:35:30 2748543 200
>>2748541
>Чел. Когда ты используешь методы класса, ты так же кричишь про неявное?
Естественно!
var имеет смысл только в одном случае — когда тебе приходится дважды писать тип класса при создании экземпляра. Поэтому ты либо пишешь var слева и тип класса справа, либо тип класса слева и просто new справа.

Какие же говноеды ИТТ, пиздец просто.

>>2748535
>Обычный сахарок. Не нравится вар
Я-то поставлю, а вот другие — нет. Официально приравниваю сишарп к уровню джва скрипта (там тоже хош явно инициализируешь, хош неявно. Хош ставишь ; а хош не ставишь. Хош объявляешь переменную, хош не объявляешь).
Аноним 29/06/23 Чтв 21:35:41 2748544 201
>>2748541
Откуда он знает, что там Url, а не string? Парсит значение. Об этом речь.
Аноним 29/06/23 Чтв 21:44:35 2748551 202
>>2748541
Ну на первой пикче стринг визуально очевиден, на примере выше Url неочевиден (если ты не держишь в голове существование расширения). Для возврата длины предпочтительно указывать тип (особенно если учесть, что int и var имеют одинаковое количество символов). А вот на второй пикче я бы даже настоятельно рекомендовал, ибо слишком длинная простыня с НЕОЖИДАННЫМ финалом.
Аноним 29/06/23 Чтв 21:48:49 2748553 203
>>2748544
На его скриншоте только сетапящие методы вызываются. Там еще не может быть результата. Это очевидно любому кто хоть раз с флюент шаблоном дело имел.
Аноним 29/06/23 Чтв 21:53:23 2748558 204
>>2748543
> var имеет смысл только в одном случае — когда тебе приходится дважды писать тип класса при создании экземпляра
Да. Мне так хочется писать:
AbstractFactoryProvider<ServerBase<DefaultTcpListner, DefaultTracer, DefaultDebuger, MySecretProtocolContextFactory,MySecretProtocolMapper,MyApplicationHandler, MyMessageDispatcher, DefaultConnectionManager>> factory = GetDefauiltServerFactoryProvider<ServerBase<DefaultTcpListner, DefaultTracer, DefaultDebuger, MySecretProtocolContextFactory,MySecretProtocolMapper,MyApplicationHandler, MyMessageDispatcher, DefaultConnectionManager>>();

А то без этого - я же не пойму, что там блядь такое же было. Этот же код не я писал. А кто-то другой.

>>2748544
var - работает явно: что справа - то будет слева. Ты в любом случае же чтобы этот метод расширения использовать - добавил юзинг необходимый, значит знал что делал.
У меня вот на работе есть код:

public static UdpClient CreateUdpClient(this string host)
Ничего, ни у кого на ревью не возникало вопросов, что да после :

"proto://host:123".CreateUdpClient()

произойдет.

>>2748551
Финал - ожидаем.
Явно указывать тип - следует только в случае, если он отличается от того что возвращает правая часть. Т.е. если бы мне надо было ICollection<IEnumerable<string>> - да, в остальных случаях - это просто мусор визуальный.
Аноним 29/06/23 Чтв 23:00:48 2748622 205
>>2748558
>"proto://host:123".CreateUdpClient()
Что здесь не так? Тут все очевидно.

>Ничего, ни у кого на ревью не возникало вопросов
А какие могут быть вопросы к расширению для стринга, блеаять? Вот если бы CreateUdpClient() мог бы возвратить один из 100500 вариаций ZalupaClient, а код выглядел бы так
var client = "proto://host:123".CreateUdpClient();
То тебе бы обязательно перезвонили.

>А то без этого - я же не пойму, что там блядь такое же было.
Да это какое-то петросянство, которое не удобоваримо по своей структуре. Тут уже вопрос в другом.

>добавил юзинг необходимый, значит знал что делал.
Я-то может и знал, а другие вряд ли.
Аноним 29/06/23 Чтв 23:39:40 2748640 206
image.png 17Кб, 445x87
445x87
Аноним 30/06/23 Птн 00:24:40 2748662 207
>>2748622
>CreateUdpClient() мог бы возвратить один из 100500 вариаций ZalupaClient
И тут ты такой рассказываешь нам, каким же образом, в шарпе, один и тот же метод может возвращать разные типы.
Аноним 30/06/23 Птн 18:59:10 2749452 208
image.png 101Кб, 1379x522
1379x522
В общем вот, аноны, единственный способ добиться плавной анимации в впф-параше
Аноним 30/06/23 Птн 23:19:33 2749862 209
>>2749452
Хуйню какую-то городишь, но ничем не могу помочь — не понимаю в чем проблема. У меня картинки нормально скроллятся.

Но твое решение максимум неоптимизированное.

>>2748640
>>2749452
>Поебать
Глаза вытекают от этого мусора
Аноним 30/06/23 Птн 23:21:05 2749867 210
>>2748662
Метод визуально не сообщает какой тип он возвращает, либо вовсе возвращает object
Аноним 01/07/23 Суб 03:52:26 2749982 211
>>2749862
> Но твое решение максимум неоптимизированное.
В чем неоптимизированность?
> Хуйню какую-то городишь, но ничем не могу помочь — не понимаю в чем проблема. У меня картинки нормально скроллятся.
Пиздишь же. Размести картинку, добавь translate x анимацию и наслаждайся микро лагами.
Аноним 01/07/23 Суб 06:16:38 2750017 212
>>2749452
не мучай себя. это проблема винды
где то читал на эту тему, но ссыль потерял
Аноним 01/07/23 Суб 13:00:01 2750112 213
Как в шарпе сделать такое:

public IEnumerable<IMyInterface> Foo(IEnumerable<MyEntity> i) =>
from it in i
select ...

Собственно вот и проблема. Я хочу чтобы то что выбралось селектом - удовлетворяло интерфейсу. Заводить отдельный класс/рекорд имплементирующий инерфейс - не хочу.
Аноним 01/07/23 Суб 13:12:18 2750119 214
Аноним 01/07/23 Суб 13:34:14 2750138 215
.png 24Кб, 512x432
512x432
>>2750119
Я видимо криво выразился. В IEnumerable<MyEntity> - нет объектов, которые бы имплементировали интерфейс.
Но я хочу передать то что из линку получилось дальше, при этом не создавая под это дело класс/рекорд.
Cast - кинет исключение. А надо чтобы анонимному типу - навесился интерфейс.
Аноним 01/07/23 Суб 13:46:41 2750150 216
>>2750112
Из коробки никак (есть парочка тухлых обсуждений фичи добавления имплементации интерфейсов анонимными классами).
Можно через левые либы.
Аноним 02/07/23 Вск 15:35:58 2751039 217
Example2.png 246Кб, 596x600
596x600
Сука, имаджинируйте моё ебало, когда я узнал, что в wpf невозможно (вообще никак) сделать пикрил. Просто нет поддержки PathGradientBrush. Самое смешное, что в WinForms такая поддержка есть! Вообще, чем больше изучаю WPF, тем больше охуеваю с кучи ограничений, которых были лишены формы, появившиеся на несколько лет раньше. Ощущение, словно майки вложили в формы всю душу, а впф так, на отъебись склепали.
Аноним 02/07/23 Вск 16:26:36 2751106 218
Аноним 02/07/23 Вск 16:30:32 2751114 219
>>2751106
Что сказать то хотел, анон? Как мне это все поможет нарисовать градиент как на пике?
Аноним 02/07/23 Вск 17:27:44 2751207 220
А что с рекомендуемым ранее The C# Players Guide?
Я по нему начал, сделал перерыв на С, хочу вернуться - а его нет.
Аноним 02/07/23 Вск 19:52:22 2751407 221
image.png 21Кб, 853x761
853x761
>>2751039
В общем сделал, храни Господь создателей SkiaSharp
Аноним 03/07/23 Пнд 21:08:20 2752573 222
>>2751207
Последняя версия плохая, предыдущие пойдет.
Аноним 04/07/23 Втр 13:05:47 2753097 223
>>2751039
>Сука, имаджинируйте моё ебало, когда я узнал, что в wpf невозможно (вообще никак) сделать пикрил.

Можно, плохо исследовал тему.
В впф есть кривые безье (Windows.Media?), дуги вот это все со свойствами, которые на 90% описывают свойства кривой в векторном редакторе типа CorelDraw, Illustrator.

И по-моему там есть даже сектор — типа дуга от круга, где начало и конец определяются углом. Выставляешь нужную толщину контура. Далее тебе надо выставить Ens Cap и Start Cap на Round — чтобы получить те самые закругления на концах. Тени делаются при помощи эффектов (тоже из коробки), они динамические.

Все что тебе остается, это конвертировать процентаж в углы.

>>2751106
Анон прав. Это графические элементы Windows.Media.
А Path вообще уберштука.

>>2751114
Какой градиент? Я его не вижу. Вижу только тень. Но если тебе нужно как пикрил >>2751407 (говеный если что), то есть для этого радиальный градиент и его можно заюзать как опасити маску.
Аноним 04/07/23 Втр 13:18:34 2753117 224
2023-07-0412-52[...].png 54Кб, 877x731
877x731
А можно сделать что-то вроде динамических enum?
Проще показать проблему. Вот смотрите пикрил, есть таблица — это список голосов говорилки яндекса.

Каждый заголовок столбца — отдельное свойство моего класса. Посмотрите на столбец "Амплуа", это манера речи и у каждого голоса их может быть несколько. К примеру у голоса "jane" их три.

Так вот, как сделать так, чтобы когда я обращался к свойству Amplua, мне IntelliSence выдавал подсказку с доступными вариантами по аналогии с enum? Я же не могу под каждый голос пилить отдельный enum? А просто массив неинформативен и потребует дополнительных действий, чтобы понять, что в нем находится и сколько. Dynamic срабатывает только во время выполнения — тоже не подходит. Tuple не подходит т.к. количество элементов у каждого экземпляра разное.
Аноним 04/07/23 Втр 17:32:20 2753514 225
1688481140008.png 3Кб, 241x209
241x209
1688481140010.png 47Кб, 301x299
301x299
>>2753097
> И по-моему там есть даже сектор — типа дуга от круга, где начало и конец определяются углом. Выставляешь нужную толщину контура. Далее тебе надо выставить Ens Cap и Start Cap на Round — чтобы получить те самые закругления на концах. Тени делаются при помощи эффектов (тоже из коробки), они динамические.
Я все это знаю, и дугу нарисовать могу без проблем. А вот раскрасить ее нужным градиентом нельзя, увы.
> Какой градиент? Я его не вижу.
Ты слепой? У дуги начальный цвет фиолетовый, а конечный синий.
> для этого радиальный градиент
Это совсем другое. Вот 2 пика, на первом радиальный, на втором нужный мне градиент из skia sharp circular
Аноним 04/07/23 Втр 18:32:24 2753618 226
2023-07-0418-27[...].png 209Кб, 1053x779
1053x779
>>2753514
>Ты слепой? У дуги начальный цвет фиолетовый, а конечный синий.
И? В чем проблема? На самом деле я юзал что-то вроде вроде цветового мэша (не помню точно как называется), но колорпикер выполнет полностью стандартными средствами
Аноним 04/07/23 Втр 18:38:06 2753629 227
>>2753117
>Так вот, как сделать так, чтобы когда я обращался к свойству Amplua, мне IntelliSence выдавал подсказку с доступными вариантами по аналогии с enum?
Такие вещи не хардкодят.
Ты там собираешься отдельную ветку кода для каждой локали городить что-ли? Это хуевый подход.
Аноним 04/07/23 Втр 19:00:25 2753670 228
2023-07-0418-48[...].png 39Кб, 693x503
693x503
2023-07-0418-44[...].png 129Кб, 941x645
941x645
>>2753629
В смысле хардкодинг? Если взять выше прикрепленную таблицу за основу, то у меня есть набор пикрилейтед №1. Основной класс Voice, он представляет строку в таблице, и есть энумы типа пола, амплуа. Единственное нет кода языка — у яндекса он пишется через дефис, а это гемор через конвертеры, чтобы сериализовать в json. Хочу чтобы я пришел через миллион лет и не сидел перебирал возможные варианты и гуглил доки.

Все это собирается в статический класс, в котором есть словарь голосов типа Voice, плюс каждый голос выведен в свойство, которое берет параметр из словаря.

А как еще? Всё в стрингах держать?
Пока что свою проблему решил через xml документацию к каждому голосу (пикрил 2), чтобы примерно представлять что где лежит, но решение так себе.
Аноним 04/07/23 Втр 19:05:00 2753680 229
>>2753618
Ты уж постарайся вспомнить, потому что мне реально интересно, как получить такой эффект на чистом впф
Аноним 04/07/23 Втр 19:53:43 2753793 230
Аноним 04/07/23 Втр 20:17:27 2753843 231
16482202601-kar[...].jpg 27Кб, 604x341
604x341
Антоны, помогите вкатуну.
Стараюсь написать консольное приложение - простенький конвертер валют в котором нет динамического выбора валюты, а курс валюты строго задан заранее.

По моей задумке первое сообщение просит ввести интересуемую сумму долларов США, покупаемых за рубли. Затем эта сумма должна быть помножена на переменную с заранее заданным значением (курс валюты) и показать получившееся значение.

Затем выводится новое сообщение и проводится еще одна процедура, но уже для продажи долларов за рубли. И так далее для других валют.

Как бы вы написали такое?
И еще вопрос, почему оператор * не применим к типу double?
Аноним 04/07/23 Втр 20:19:58 2753850 232
>>2753843
Первым делом я бы выкинул нахуй double и взял бы decimal.
Аноним 04/07/23 Втр 20:36:55 2753887 233
>>2753680
Вспомнил анон.
Короче, тот вариант был сделан на основе вот этого
https://stackoverflow.com/questions/4839666/creating-gradient-brush-along-a-circular-path

Это ссылка на проект, где я немного подправил градиент
https://ru.files.fm/u/jnsdqpawa

Но в итоге я принял другое решение. Я просто взял растровый фон, кек. А чтобы это не выглядело всрато при разных масштабах, маски прозрачности у меня были параметрическими (как раз и того примера). Я проверял скейл подобной констуркции, и в целом размытый градиент никак не палится — выглядит так, как будто градиент параметрический.

Да и в целом в фотошопе сделано ровно тоже самое. Причина проста — производительность. Эти градиенты очень прожорливы. Тоже самое и гарадинет Saturation и Lightness созданы при момощи трех слоев - базовый цвет + растровый градиент насыщенности + растровый градиент яркости повернутый на 90 градусов.
Аноним 04/07/23 Втр 20:39:33 2753891 234
image.png 8Кб, 466x101
466x101
>>2753843
> почему оператор * не применим к типу double?
Что прости?
Аноним 04/07/23 Втр 20:46:51 2753902 235
>>2753843
Берешь Console.ReadLine(), то что он вернет парсишь Double.Parse(), это значение умножаешь или делишь на что ты там хочешь. Не забывай, что пользовательский ввод может быть хуевым.
Аноним 04/07/23 Втр 21:32:25 2753950 236
>>2753902
>что он вернет парсишь Double.Parse()
да чтоб тебе зарплату такой программой считали
Аноним 04/07/23 Втр 21:38:45 2753962 237
>>2753950
Чел, он кодить учится, а не на собес в финтех готовится.
Аноним 04/07/23 Втр 21:40:30 2753964 238
>>2753962
тогда хреновый с него программист
ибо ПРОГРАММИСТ должен знать о проблеме float/double, а не вакуумносферический финансист.
Аноним 04/07/23 Втр 21:42:31 2753969 239
>>2753964
Итт нет программистов. Только макаки и домохозяйки с чсв. Так что не беда.
Аноним 04/07/23 Втр 21:51:22 2753975 240
>>2753670
>В смысле хардкодинг?
Вот то что у тебя на 2-м пикет самый натуральный хардкодинг и есть. Ты даные не только в код пихаешь, но и еще и по комментам размазал. Пиздец.
Все что на пике должно где-нибудь в БД лежать, на крайний случай в конфигурации. А в самом коде тебе дожно быть до пизды какое амплуа, в каком голосе лежит. Ты с абстракцией должен работать.
Аноним 04/07/23 Втр 23:33:08 2754155 241
>>2753969
Прям таки с чсв.
Мимо бейсико-домохозяйка.
Аноним 04/07/23 Втр 23:36:57 2754157 242
>>2753975
Да, логично. Спасибо.
Аноним 05/07/23 Срд 00:21:00 2754184 243
>>2753975
А в каких случаях употреблять enum? Где грань между харкодингом и перечислением констант?

И второй вопрос: как за собой тащить конфигурации, если делаешь библиотеку? Добавлять файлы в ресурсы — глупость и своего рода тот же хардкодинг.
Аноним 05/07/23 Срд 00:44:21 2754194 244
>>2753964
Ты дурачок бля, я говорил что я программист? Я сказал, что я вкатун. Начал вкатываться через шарп буквально пару - тройку дней назад. Успокойся пжлст.
Аноним 05/07/23 Срд 01:30:42 2754227 245
>>2753975
Запихнул в джейсон файл и десериализую в класс Voice.
Файл копирую при сборке как внедренный ресурс в условную папку Data. Дальше юзер библиотеки сам хочет вручную созадет экземпляр Voice, хочет десериализует файл.

Как-то так. И самое главное, вопрос о выборе итемов отпал сам собой, если эти данные привязать к UI.
Аноним 05/07/23 Срд 01:31:16 2754228 246
2023-07-0501-23[...].png 34Кб, 549x653
549x653
Аноним 05/07/23 Срд 02:01:44 2754235 247
Есть идеи каким образом было озвучено видео?

https://youtu.be/1hmUZx8DIWo
Хачатуру платить 500р влом. Я видел в яндекс клауд SpeechKit Brand Voice возможность создавать собственные голоса, но там похоже речь идет о небольших фразах или вставках в уже готовые сегменты аудио.
Аноним 05/07/23 Срд 02:11:26 2754236 248
2023-07-0502-10[...].png 375Кб, 570x623
570x623
>>2754235
>Хачатуру платить 500р влом.
В итоге там будет "установите мою программу" без cmd, смс и регистрации.
Аноним 05/07/23 Срд 03:09:15 2754241 249
>>2753793
Я как раз знаю, как это делают обычно - по твоей ссылке просто готовая картинка используется, потому и спрашиваю.
Аноним 05/07/23 Срд 03:35:38 2754242 250
bandicam 2023-0[...].mp4 230Кб, 608x580, 00:00:05
608x580
bandicam 2023-0[...].mp4 375Кб, 528x400, 00:00:07
528x400
>>2754235
so-vits-svc

>>2754241
Практика показала, что фейковые градиенты наиболее эффективны. Только контуры делают векторными, чтобы не было "мыла".

Я тебе больше скажу, что в фотошопе еще и кружочек цветопробы фейковый. Во время его перетаскивания, на самом деле он прячется и иконка курсора меняется на имитацию этого кружочка.

Добиться подобной скорости при честной отрисовке градиента не представляется возможным на впф или формсах. К примеру видеорил 1 - это как реализовано в программе Corel Draw, где честный прямоугольничек поверх градиента следует за курсором. Безусловно там стоит таймер, но чисто ради стабилизации фпс (я пошел сперва по этому пути и скажу, что без ограничения, фпс получестя нестабильным). На втором видео то, как реализовано в Photoshop - в данном случае при зажатии ЛКМ иконка курсора меняется на кружочек и никаких тормозов при перерисовке нет.

Интересно почему перерисовка курсора не заставляет перерисовываться UI-элемент целиком?

Само градиентное поле выбора тоже фейковое и состоит из послойно накладывающихся друг на дурга градиентов. Одна из причин, почему рядом всегда есть окно, отображающее истинный цвет.
Аноним 05/07/23 Срд 09:20:16 2754310 251
.mp4 73Кб, 254x316, 00:00:04
254x316
>>2754242
Canvas у которого BackgroundBrush это хитрый VisualBrush, у которого внутри Rectangle с LinearGradientBrush + OpacityMask. У Canvas один чайлд - кружочек, который по MouseMove по этому канвасу двигается. Вроде нет никаких проблем с фепесами.
Аноним 05/07/23 Срд 09:25:13 2754318 252
>>2744390
>>2745506
Тогда, что посоветуешь для изучения именно в области WPF? Или по самому ядру .NET? Какие конкретно книги?
Аноним 05/07/23 Срд 09:51:33 2754336 253
>>2751039
В плане брашей, впф просто маппит функции Direct2D. Так что все вопросы к разрабам DirectX тоже майкам.
Аноним 05/07/23 Срд 10:18:42 2754347 254
>>2754310
> Canvas один чайлд - кружочек, который по MouseMove по этому канвасу двигается. Вроде нет никаких проблем с фепесами.
Можно наследоваться от canvas, переопределить onrender и рисовать кружочек в drawingcontext, так должно быть еще эффективнее.
Аноним 05/07/23 Срд 11:38:58 2754426 255
Без названия (1[...].jpeg 6Кб, 292x173
292x173
Отрыл HH с вакансиями. Какое же говно, ничего нет, все хотят милд+/синиор за 150к, ИП Хуйсосян Маможонович со своими интерсными проектами в области прожарки люля. Зачем я начал вкатываться в это говно, работу никогда не найти. Надо было питон учить и на собесах двигать тазом.
Аноним 05/07/23 Срд 11:45:35 2754437 256
>>2754310
Возможно, но ты еще не добавил кучу говна, типа окна расширенной цветопробы, и списка цветовых каналов в разных цветовых схемах RGB, HSB, HSL, HEX, обновляющихся параллельно с передвижением курсора.

Так же непонятны размеры градиентной области, где происходит перерисовка. Чем она больше, тем выше затраты.

И почему ты решил шатать OpacityMask вместо трансформаций обычного ректенгла? Выглядит так сложно, как будто это хитрый план.

Алсо, просто интересно, ты решил проблему со скругленными углами твоего градиента? Я тоже пытался так делать, но было либо сложно, либо нелогично выставить ноль\максимум в этих самых углах. Я от радиусов отказался в итоге.
Аноним 05/07/23 Срд 11:52:31 2754446 257
>>2754426
Что мешает выучить и его? На самом деле питон лезет из всех щелей, тоже подумываю к нему приобщиться.
Аноним 05/07/23 Срд 11:54:08 2754450 258
>>2754426
Так учи питон в чем проблема?
Перекат из языка в язык дело месяца-двух.
Хоть и сложно даунгрейдиться до питона, но раз бабло нужно то в путь, а вообще за баблом иди в 1С, там его тонна и тележка.
Аноним 05/07/23 Срд 11:56:15 2754452 259
>>2754446
>>2754450
А нахера я тогда проебал время на этот кал
Аноним 05/07/23 Срд 11:59:19 2754454 260
>>2754452
Некоторые питонисты наоборот изучают шарп. Стремление к неизведанному и выстраивание иллюзий — это нормально.
Аноним 05/07/23 Срд 12:02:48 2754461 261
>>2754454
В пизду, пойду на сво, посижу по максимуму на 2 сотыги, потом отпилю себе ногу и буду сычевать на пособиях. Не хочу я больше вкатываться.
Аноним 05/07/23 Срд 12:04:45 2754463 262
>>2754452
в смысле проебал?
если ты чисто за баблом идешь, то зачем тебе что-то кроме 1С ?

ИТ это вечное обучение и для людей которым это нравится, за исключением какой-нибудь легаси поддержки в швейцарском банке где ты еще перфокарты ворочить будешь (не шутка)
Аноним 05/07/23 Срд 12:10:22 2754468 263
>>2754463
>если ты чисто за баблом идешь
А зачем ещё нужна работа бля? Если бы я был миллиардером я бы плавал в батискафе смотреть на Титаник.
>1С
Я ебаль закон в рот это говно. Сейчас работаю админом, не хочу в этом копаться.
>вечное обучение
Невозможно бесконечно обучаться. Во-вторых, что значит обучаться? Сидеть по 10 часов в день? Я тебя умоляю никто этим не занимается, иногда пощупаешь новую приблуду, почитаешь доки мельком, если есть конкретные задачи можно почитать плотнее. Это несоизмеримо проще чем вкатываться с нуля. Кто в разработке работают, тоже самое говорят, ну пощупаешь фреймворк новый, где-то подчитаешь что-то.
Аноним 05/07/23 Срд 12:19:49 2754480 264
>>2754461
Очередное выстраивание иллюзий по неизведанному. Ты думаешь, что отпилишь себе ногу сам, но на самом деле отпилят тебе жопу .

В средние века, когда еще не все территории были изведаны человечеством, существовала такая карта как "маппа мунди", суть которой в том, что на неизвестных территориях обязательно жило какое-то необычное существо, вроде моноподов — людей с одной ногой при рождении. Никто не знал, что там на самом деле, но разве это мешало предполагать и фантазировать? Не исключались локальные конфликты на тему "а вот у нас тут нихуя нет, а вот у моноподов есть всё!".

Только "разведка территории" поставит твои мозги на место. Изучай питон и возвращайся.
Аноним 05/07/23 Срд 13:09:06 2754524 265
>>2754480
После этого поста я точно понял, что на шарпе сидят сумасшедшие.
Аноним 05/07/23 Срд 13:12:14 2754527 266
Правильно ли я понимаю, что если объект А имеет ссылку на объект Б, который имеет ссылку на "постоянный" (например это свойство главного класса) объект В, то после того, как все ссылки на А и Б будут удалены, они будут собраны ГК?
Аноним 05/07/23 Срд 13:14:38 2754534 267
>>2754527
да. кого удерживают объекты - не имеет значения
важно чтобы не удерживали ИХ
Аноним 05/07/23 Срд 13:46:31 2754559 268
>>2754524
ну тут такое дело
уже сидящие на шарпе они нашли где им его применять и денежку загребать
И в общем то они не в курсе ситуации с поиском заработков.

лично я зарабатываю на шарпе, но знаю и активно использую питон также.
Аноним 05/07/23 Срд 14:16:59 2754590 269
image.png 26Кб, 1147x183
1147x183
хочу скрыть тайтл бар у окна, но пока удалось только всё сломать, как фиксить?
Аноним 05/07/23 Срд 14:18:18 2754593 270
>>2754590
дык простой скрой
а начинать нужно про что вообще речь
ибо убрал аттрибуты окна в впф просто выставить одно свойство.
Аноним 05/07/23 Срд 15:06:44 2754650 271
>>2754590
WPF? Неправильно делаешь.

Во-первых у окна есть своства специально для этого
WindowStyle - поперебирай опции. Без хидера это 'none'.

Если надо что-то фигурное, типа скругленных углов, то юзай еще AllowTransperency — опция убирает черный бэкграунд, делая основу окна прозрачной. Но у этого подхода есть минусы — пользователь не сможет менять размеры окна, там надо небольшой изворот делать.

Во-вторых шатай Style для определения визуального стиля UI-элемента.
Если захочешь сделать свой кастомный хидер с функцией перемещения окна и т.д., то ради бога не используй таймеры и прочее говно. Используй Behaviors.
Аноним 05/07/23 Срд 15:15:42 2754664 272
>>2754593
>>2754650
а вы знали, что сися - это не только впф?
Аноним 05/07/23 Срд 15:17:30 2754667 273
>>2754664
ты дурачок что ли?
потому и сказал что нужно говорить О ЧЕМ РЕЧЬ
Аноним 05/07/23 Срд 15:21:31 2754675 274
>>2754667
чмо безмозглое, я же скинул скрин где я вызываю вин апишную функцию
Аноним 05/07/23 Срд 15:28:35 2754689 275
>>2754675
бестолочь, и что этот вызов должен был сказать?
может ты просто дурачок (а на это вполне похоже ибо строишь из себя и считаешь что все вокруг должны быть телепатами которые разбираются в твоем безумии), что не знает как делать штатно, и поэтому делаешь через винапи
Аноним 05/07/23 Срд 15:32:03 2754694 276
GDI32
Аноним 05/07/23 Срд 16:47:11 2754793 277
>>2754650
> Если захочешь сделать свой кастомный хидер с функцией перемещения окна и т.д., то ради бога не используй таймеры и прочее говно. Используй Behaviors.
Есть же windowschrome. Можно указать любой размер хидера, он будет прозрачным и за ним можно любой контент располагать.
Аноним 05/07/23 Срд 20:38:57 2755257 278
Раз уж тут такие переисполнение по впф челы сидят, хочу спросить.

Если ли способ способ закрыть/выгрузить/задиспозить впфшный Page. Пусть даже способ хаковый. Условие - я не владею впфшным Window, которое этот Page хостит. Ни ссылки, ни малейшего намека, где это виндоу находится нет.
Аноним 05/07/23 Срд 20:39:50 2755258 279
Аноним 05/07/23 Срд 20:48:47 2755269 280
>>2755258
Что-то типа FindWindow и перебрать конпки, кока не найдется крестик? Это совсем не то.

Я так-то в домене этой приложухи нахожусь. Апишки дергаю. Приложуха сама умеет решать, когда нужно выгружать мое Page, и когда просить новое, чтобы показать пользователю. Однако делает она это плохо и все идет по пизде. Все что мне нужно, выгрузить Page самостоятельно, заранее. Но вот беда на нем нет ни Dispose, ни Close, ни Unload. Нихуя.

Вот я и подумал, может есть впфшный хак, как объект Page саботировать. Там же целая история с наследованием в рамках фреймворка.
Аноним 05/07/23 Срд 20:58:48 2755287 281
>>2755257
зачем вообще использовать Page
Аноним 05/07/23 Срд 21:07:41 2755309 282
>>2755287
Есть интерфейсный метод, который возвращает FrameworkElement кажется. Во всех гайдах это либо Page, либо UserControl. Я пробовал туда Window отправить, но получаю исключение. Что-то вроде "виндоу не может находится в иерархии так низко". Ну понятно, что там свое окно, которое хостит всякие FrameworkElement'ы типа Page. Вот только к этому объекту окна, чтобы вызвать на нем Close, не подобраться методом апишки приложухи, которая использует этот впфшный механизм.

Может есть хитрый вариант что-то к чему-то привести в рамках типов впф и дернуть на этом какую-нибудь херню, чтобы все посыпалось нахуй?
Аноним 05/07/23 Срд 22:54:35 2755487 283
>>2754793
Я его использовал для возможности изменения размеров в режиме WindowStyle=none. Не знал про хидер.
Аноним 05/07/23 Срд 23:24:33 2755519 284
>>2755309
>Я пробовал туда Window отправить, но получаю исключение.
>Ну понятно, что там свое окно, которое хостит всякие FrameworkElement'ы типа Page.
Естественно, Window не является UI-элементом.
Кстати Page тоже своего рода исключение из поведения других контролов, это бяка характерна тем, что изолирует контент внутри себя. Нужно очень постараться, чтобы найти применение ему — например, если у тебя какой нибудь браузер. В любых других ситуациях нужно наследовать другой контрол.

>Есть интерфейсный метод, который возвращает FrameworkElement кажется.
Я не совсем понимаю. Метод возвращает FrameworkElement тебе или домену?
Ты можешь свой контрол сделать Disposable и при unloaded событии твой контрол задиспозится автоматом. Что происходит со предыдущим элементом если запихнуть туда новый?

>Все что мне нужно, выгрузить Page самостоятельно, заранее. Но вот беда на нем нет ни Dispose, ни Close, ни Unload. Нихуя.
Во-первых, ты должен сам реализовать интерфейс IDisposble с методом Dispose, где ты выгружаешь всю потенциальную бяку, мешающую CG добить твой контрол. При событии Uloaded будет автоматически вызван Dispose (должен).
Аноним 05/07/23 Срд 23:35:02 2755540 285
>>2755269
>При событии Uloaded будет автоматически вызван Dispose (должен).
Точнее ты подписываешься на событие Page.Unloaded и оттуда вызываешь метод Dispose.

Какие элементы мешаю помереть Page? Что именно как ты пишешь
>Однако делает она это плохо и все идет по пизде.
?
Аноним 06/07/23 Чтв 09:18:19 2755797 286
>>2740238 (OP)
Почему локализация в WPF'е это такой пиздец?
Неужели нету лучшего способа чем выносить абсолютно все строки с UI в код бихайнд и биндить их?
Аноним 06/07/23 Чтв 10:10:41 2755820 287
>>2755797
Есть же файлы ресурсов, к ним биндишься через x:Static
Аноним 06/07/23 Чтв 10:17:33 2755823 288
>>2755820
И нихуя не работает - в рантайме после запуска окна не переключишся как с обычными строками, нужно задавать культуру перед инициализацией компонентов и срать пользователю окошко о том что ему нужно перезапустить приложение.
Аноним 06/07/23 Чтв 10:52:40 2755855 289
image.png 12Кб, 827x61
827x61
без хуесосов осилил короче
Аноним 06/07/23 Чтв 11:28:04 2755884 290
Аноним 06/07/23 Чтв 11:55:28 2755916 291
>>2755855
Винапи это сишный интерфейс, а ты приперся в тред веб-макак которые знают только HTTP200.
Аноним 06/07/23 Чтв 11:58:33 2755922 292
>>2755916
активно использую винапи в WPF
но когда в тред приходит чудо которое вываливает "догадайтесь че у меня" и еще ведет себя как быдло, то правильно послать его
Аноним 06/07/23 Чтв 13:43:34 2756043 293
>>2755797
Локализацию лучше вообще хранить в xml или json, а потом десериализовывать в словарь ресурсов.

>>2755820
А почему статик, а не динамик? Динамик позволяет обновлять изменения. Статик хоть и мене рексурсозатратен, но по факту экономия не такая уж и большая, а иногда ее вовсе нет. Статик юзают только в тех случаях, где не работает динамик.

>>2755922
Как в случае с темой UI, у тебя должен быть метод, который меняет словари ресурсов в приложении.

Общий порядок таков:
1. У тебя должен быть отдельный словарь базовых цветов (таких словарей может быть множество: отдельный словарь цветов для темной темы, отдельный для светлой и т.д.)
2. Отдельный словарь надписей (предпочтительнее xml или json сконвертированный в ресурс). Тут как и с первым вариантом, у тебя есть набор файликов с Ru, En и прочими локализациями.
3. Дальше идут стили для всех контролов, которые биндят эти цвета и надписи как динамический ресурс. Динамические ресурсы позволяют не мерджить напрямую файлики из пункта 1 и 2, это будет сделано в рантайме.

Всем этим управляет условный менеджер темы, который комбинирует словари ресурсов из пунктов 1, 2 и 3 на основании выбранной темы и локализации. Даже если юзер в рантайме меняет тему или язык, менеджер темы просто очищает словарь ресурсов основного приложения и добавляет новую комбинацию из пунктов 1, 2 и 3.

Посмотри курс Advanced Reusable Styles and Themes in WPF от Pluralsight.

А еще к словарю ресурсов так же можно привязать код бихайнд, чтобы можно было выполнять какую либо логику в стилях. По сути это выглядит как UserControl из .xaml части и .cs части.
Аноним 06/07/23 Чтв 13:47:24 2756052 294
>>2756043
Ссылка >>2755922 случайно прилипла. Текст относится к теме постов по первым двум ссылкам.
Аноним 06/07/23 Чтв 14:17:15 2756081 295
2023-07-0614-16[...].png 69Кб, 1340x745
1340x745
Аноним 06/07/23 Чтв 14:27:04 2756097 296
2023-07-0614-25[...].png 46Кб, 1368x893
1368x893
Аноним 06/07/23 Чтв 19:52:43 2756600 297
Похоже, что мои ожидания по поводу помощника в студии были преувеличены.

Во-первых он не отличается стабильностью. Бывает, что показывает правильно, но второй раз просто отказывается показать тоже самое, если ты удалишь букву и снова ее вставишь.

Во-вторых поражает, что студия пишет "хуйня нейм никогда не используется" к свойству/событию, которое блять ТРЕБУЕТ ИНТЕРФЕЙС.
Аноним 06/07/23 Чтв 20:17:26 2756621 298
>>2755519
Спасибо за ответ, чувак.

>Page изолирует контент внутри себя
Вот оно как. Скорее всего потому разрабы приложухи, которой я пытаюсь управлять, этот механизм и выбрали. Чтобы изолироваться от пользовательского, то бишь моего кода.

>Я не совсем понимаю. Метод возвращает FrameworkElement тебе или домену?
Я регистрирую свой объект, на котором реализован интерфейсный метод. Приложуха сама вызывает этот метод и получает объект Page, на котором живет контрол webview. Вот это вебвью корень всех зол. Капризная хуйня, которая не терпит одновременного существования других оболочек над хромом. Это причина по которой я ищу варианты приканчивать свой Page. Разумеется можно вызвать Dispose на webview, однако это нерабочий вариант, потому что с точки зрения приложухи Page продолжает оставаться валидным объектом, а реинициализировать вебвью на том же Page, к сожалению, невозможно. Поэтому нужно похерить не только контрол, но и хост этого контрола. Чтобы приложуха запросила у меня новый Page.
Аноним 06/07/23 Чтв 20:39:51 2756665 299
>>2756621
А что будет, если ты изменишь содержимое экземпляра Page, который ты отправил в приложуху? Будут ли фиксироваться изменения в этом приложении?
Аноним 06/07/23 Чтв 20:55:50 2756689 300
>>2756665
В этом Page кода кот наплакал. В разметке единственный контрол, webview, в гриде растянутый на все окно. В cs код правильной инициализации этого контрола. Вот и все. Я не большой знаток wpf, на мой взгляд страничка ведет себя вполне типично. Окно, которое ее хостит, себя никак не проявляет.

При некоторых внутренних сценариях приложуха убивает эту страничку и просит у меня новую. То что старая помирает, я понимаю потому что подписан на Unload, в котором диспозится webview. Однако как этот Unload вызвать самостоятельно я без понятия.
Аноним 06/07/23 Чтв 21:01:18 2756696 301
.jpg 1027Кб, 2894x4093
2894x4093
Анончик, смотри. Есть условие: надо получить информацию о количестве активных телефонных разговоров в час-минуту за сутки.


Собственно, структура того что в базе:

public class Call{
public int Phone1Id { get; set; }
public int Phone2Id { get; set; }
public DateTime StartedAt { get; set; }
public DateTime? CompletedAt { get; set; }
}

Что должно быть на выходе:

int[][] CallsCount; //[24,60]

Собственно, я нахуячил такое вот охуенное условие


((StartedAt<=startDt || (StartedAt >= startDt && StartedAt <= endDt)) && CompletedAt == null) // звонок еще идет
||((StartedAt<=startDt || (StartedAt >= startDt && StartedAt <= endDt)) && (Completed != null && ((Completed>=StartedAt && Completed<=endDt)||(Completed>endDt))))

Оно - работает и работает как нужно.
Но меня смущает что это пиздец какая громоздкая конструкция.
А как ее упростить - я хз.

Есть какие-нибудь сервисы для упрощения вот таких вот монструозных условий?
Аноним 06/07/23 Чтв 21:06:19 2756702 302
>>2756696
Ну. Сейчас вижу, что чутка можно упростить

((StartedAt<=startDt || (StartedAt >= startDt && StartedAt <= endDt)) && ((CompletedAt == null) || ((Completed>=StartedAt && Completed<=endDt)||(Completed>endDt)))

Все еще выглядит монструозно.
Аноним 06/07/23 Чтв 21:39:05 2756746 303
>>2756689
Если ты у себя в экземпляре Page очистишь содержимое Content, то в хосте это тоже очистится?

Page это же просто контейнер, который в идеале должен существовать на протяжении всей сессии. Я нихера не понимаю. Зачем ты шатаешь webview, если надо очищать Page, который запустит Unloaded webview?

Ты прибил гвоздями webview к page и страдаешь.
Аноним 06/07/23 Чтв 21:39:05 2756747 304
Не понимаю что вы нашли в этом кале (C#). В PHP всё гораздо проще и удобней, сделано для людей, а не для роботов каких-то. Плюс есть конкуренция и разнообразие: лара, симф, юи и еще куча других годных.

У вас же тут ниче крутого в принципе не существует. Куча фич, но кто-то вообще их использует? Еще расскажите как вы коллекции кортежей юзаете или что-то подобное, это просто курам на смех.
Аноним 06/07/23 Чтв 21:40:58 2756751 305
>>2756747
Ты с инопланетянами общаешься? Ты ведь даже не знаешь какие у кого задачи.
Аноним 06/07/23 Чтв 21:55:35 2756776 306
>>2756747
Я вот хочу перекатиться в няшный шарпик из блевотной жабы. Пыху вообще языком не считаю.
Аноним 06/07/23 Чтв 22:02:26 2756782 307
>>2756776
Лол, зачем с говна на говно? Любишь говно? Говноед-шарпо-джаво-блядун? Вот это микс!!!
Аноним 06/07/23 Чтв 22:09:34 2756789 308
>>2756746
>если надо очищать Page, который запустит Unloaded webview
Просто скажи куда нажимать, чувак. Я завтра попробую.
Аноним 06/07/23 Чтв 22:10:53 2756791 309
>>2756747
>для роботов каких-то
Все мы биороботы, чел...
Аноним 06/07/23 Чтв 22:31:43 2756815 310
.jpg 355Кб, 700x700
700x700
>>2756747
Ну. Давай я расскажу.

У меня, в детстве, хуй пойми откуда была здоровая такая книга что-то про .NET3.5
В ней шел диск, на котором была ВижуалСтудио.
Собственно. Вот представь, ты хуй лет 12, ты кодил на Паскале всякие задачки в школе. А тут тебе шарп в руки попадает. В котором и окошки делать сразу можно, а не непонятную консоль, и куча штук для работы со списками-колекциями, и, блядь, СТРОКИ удобные, а не как в ебучем Си, где ты ебись с этими строками сколько хочешь, все равно выебут тебя.

Ну так вот. Беру я, и начинаю всякую билеберду делать: решалка уравнений, чтобы просто вбить уравнение из задачника и решить, принести марьванне; и всякие игрульки текстовые(СТРОКИ НОРМАЛЬНЫЕ, БИЛЯДЬ); игрульки НА ФОРМАХ в духе мархухена или маривы; мамке бухгалтеру - программулину, чтобы заполняла как надо отчеты в экселе. А потом - иду я в вуз, а там ООП начинают объяснять, и, блядь, НА ШАРПЕ.

Собстенно. К чему я. К тому, что шарп - это первый язык, которым, блядь, УДОБНО пользоваться. Ты не ебешься с ним, а делаешь то что тебе хочется, просто, быстро, без всяких непонятных игришь с системами сборок, знаний арифметики указателей, миллионов непонятных библиотек, которые хуй пойми как подключать, окружения в десятки гигов, чтобы блядскуий хелловорлд вывести, никаких непонятных несовместимостей, когда ты копируешь код, а он, блядь, не работает, потому что хуйло решило, что теперь надо так а не так. Нет, блядь, ты просто берешь и делаешь что тебе хочется, при этом ты не ограничен был вебо-парашей, не ограничен консольками, единственное ограничение было - винда, но нахуй что-то кроме винды так-то надо?

Собственно. Вот так я и полюбил шарп. Да. Шарп это комфорт, шарп это жизнь. И даже, если сейчас, я старый хуй, который и на плюсах пару лет поработал, и в жаву наступил, и даже поддерживал код на ебучем ПХП, я все еще считаю, что шарп - это любовь, жизнь, процветание. Единственно чего бы я хотел для шарпа - это отвязку от майков, какой-нибудь Open.NET. А так - шарп - любовь. Да.
Аноним 06/07/23 Чтв 22:32:39 2756817 311
>>2756782
Люблю конфеты, потому и хочу шарпик. Жаба - говно, да. Пхп и другая пыхоплеяда - понос вперемешку с мочой и блевотиной.
Аноним 06/07/23 Чтв 23:45:56 2756928 312
>>2756815
Всё то же что ты описал есть в PHP, кроме того что он привязан к вебу - единственный недостаток. В PHP даже ООП шире и ярче играет, чем в Шарпе или Жабе, оно тупо удобное. И объявление переменных моё любимое конечно.
Аноним 06/07/23 Чтв 23:54:53 2756946 313
>>2756789
Page.Content = null;

Когда ты у себя в xaml пишешь что-то вроде:
<Page>
. . . <Grid>
. . . . . . <Button/>
. . . </Grid>
</Page>

То по сути ты делаешь делаешь это:
Grid myGrid = new();
myGrid.Children.Add(new Button())

Page myPage = new();
myPage.Content = new Grid();


Большинство контролов может хранить в себе содержимое. Свойство с содержимым именуется по разному. Если контрол способен хранить в себе только один элемент, то обычно такие свойства именуются Child или Content. К примеру: Page.Content, Button.Content. Если может хранить список, то именуется как Children. К примеру: Grid.Children, StackPanel.Children.
Есть уникальные названия, например у TextBlock, у которого содержимое может быть только в формате string, поэтому оно именуется как Text.

Отсюда следует, что если мы сделаем это
myPage.Content = null;
то мы избавимся от myGrid и Button внутри myPage.

Еще одно замечание. Контролы не могут быть дочерними элементами сразу у двух контролов-родителей. Ты не сможешь myGrid добавить в Content еще одной Page, пока ты не извлечешь из содержимого первой Page (либо не присвоишь null). Это надо учитывать.
Аноним 06/07/23 Чтв 23:57:51 2756948 314
>>2756946
Grid myGrid = new();
myGrid.Children.Add(new Button())

Page myPage = new();
myPage.Content = myGrid;


фикс
Аноним 07/07/23 Птн 01:01:05 2756987 315
2023-07-0700-15[...].png 17Кб, 668x208
668x208
Вы только посмотрите на это говнище, оно просто мусорит мое окно ошибок. Что я могу поделать, если интерфейс ICommand требует реализацию CanExecuteChanged event, но мне оно не требуется?

2023 год @ искусственный интеллект тебя заменит.
Аноним 07/07/23 Птн 06:41:01 2757051 316
>>2756747
>>2756928
пхп не уместно сравнивать с сисей, учишь сисю = можешь писать, что угодно с кайфом, учишь пхп = сосёшь хуй в вебе и кидаешься калом на сосаче
Аноним 07/07/23 Птн 10:11:47 2757121 317
Есть вьюмодель, у неё есть несколько bool свойств.
На вью есть несколько панелей, видимость которых должна зависеть от комбинации этих свойств.
Как это сделать?

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

Я думал можно сделать что-то типа такого:
<Binding Converter={BooleanToVisibilityConverter}>
____<Multibinding Converter={BooleansToBooleanAndConverter}>
________<Binding Path=Prop1/>
________<Binding Path=Prop2/>
________<Binding Path=Prop3/>
____</Multibinding>
</Binding>
Но так нельзя.
Аноним 07/07/23 Птн 10:31:36 2757135 318
>>2756747
>В PHP всё гораздо проще и удобней, сделано для людей
ох насмешил. ладно бы хоть питон был, но пхп...
Аноним 07/07/23 Птн 11:19:47 2757169 319
>>2757121
ну делай обычный конвертер, какая проблема
Аноним 07/07/23 Птн 14:20:32 2757393 320
>>2740238 (OP)
В треде есть некроёбы?
У меня случилась просто неведомая ебаная хуита:
Делал я когда-то один небольшой проект пару лет назад, и тут заказчик внезапно ожил и попросил допилить небольшую фичу. Открываю проект - студия говорит что 4.5 фреймворк на котором был проект уже выпилили и вот бери обновляйся. Я без задней мысли обновился на 4.8, начал пилить фичи, попутно их тестил, все было норм. Затем когда допилил, решил что стоит пройтись по всему проекту на всякий случай и тут почалось. В месте где идет обращение к XmlSerializer (System.Xml) вылетает эксепшн:
Не удалось загрузить файл или сборку "Проектнейм.XmlSerializers, Version=Версияпроекта, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл.
Причем в том месте я вообще никаких изменений не делал.
В проекте он присутствует, вскрывал дотпиком новую и старую версию - библиотека 4.0.0.0, идентичная.
Далее еще интереснее - у меня есть этот же проект, с обновленным фреймворком, но без изменений и если его запустить в дебагере - он тоже выдает эту ошибку, но если запустить просто exe в папке debug - он нормально работает. Но с измененным проектом такое не работает.
И если поменять название в свойствах сборки он вообще не запускается и выдает ошибку как выше только уже не пишет какую либу он не может загрузить. И дальше начинает спамить что поток не может получить доступ к объекту другого потока пока не словит стековерфлоу.
Кто-нибудь встречался с подобной хуитой?
Сегодня я конечно еще попробую создать совсем новый проект и руками перетащить файлы туда, и возможно потыкать разные версии фреймворка, но я не уверен что это поможет.
Аноним 07/07/23 Птн 15:04:51 2757441 321
Закрылся тикет https://github.com/dotnet/wpf/issues/438

Это они че, спустя столько лет, добавили наконец этот диалог выбора папки? или че вообще
Аноним 07/07/23 Птн 17:39:28 2757645 322
>>2756747
Одебиливший от динамикодрисни скриптозависимый вебпарашепыходебил, спок
Аноним 07/07/23 Птн 19:39:48 2757852 323
>>2757441
> The WinForms dialog in .NET Core uses the newer API already
Ясно. Как обычно, нужно просто юзать няшные винформы вместо костыльного WTF.
Аноним 07/07/23 Птн 20:33:51 2757942 324
>>2756946
Спасибо за ответ.

Подвожу итоги целого дня пердолинга.

Идея не использовать гвозди для размещения webview на page оказалось отличной - я сделал именно как ты написал. Благодаря этому удалось закрыть часть кейсов, когда webview нужно срочно уничтожить ради работоспособности всего домена. При этом Page может продолжать работать как ни в чем не бывало. Это то, что нужно.

Однако без подводных камней не обошлось. Обнаружилось парочка проблемных сценариев. Там происходит какая-то хуйня с переключением контекста, потоками и таким прочим.

Может так случиться, что основной поток приложухи, который является так же основным для окна, в котором живет мой Page, кладет прибор на это окно из за чего оно виснет. Эта забывчивость чинится хитрым костылем. Но причина не ясна.

И вторая проблема связана с инициализацией webview. Может так случиться, что оно не инициализируется. Есть ряд действий с приложухой, которые к этому приводят. Но это довольно искусственный сценарий. Скорее всего пользовательский, относительно меня, код делать так не будет.
Аноним 07/07/23 Птн 23:17:35 2758166 325
Как же хорош всё-таки PHP. ООП кайфовое, без лишней хуеты как тут в сисюрпе. Разнообразие фреймворков, приятный синтаксис, много работы самой разной: от AI до клепательства сайтиков. Советую всем в треде удалиться отсюда и перейти сразу в тред по PHP.
Аноним 07/07/23 Птн 23:22:51 2758169 326
>>2757942
да ты крут. я за десятки лет не знаю нахрена нужен Page если есть юзерконтрол

>>2758166
>Как же хорош всё-таки PHP. ООП кайфовое,
ты бы попробовал протрезветь. ооп у него хорошее лол. да одних __get/__set хватает чтобы охренеть
так что удаляйся ты сам и вали в тред пхп
че вообще пришел лол
Аноним 07/07/23 Птн 23:28:19 2758176 327
>>2758169
Насрать вам в тред спецально. А что ??
Аноним 07/07/23 Птн 23:34:08 2758180 328
>>2758176
смешная попытка. тут как бы и пхпшники сидят
вот я пхпшник еще со времен пхп 3 (на пхп уже СЛАВА КТУЛХУ не пишу, но приходится поддерживать проекты пхп 7)
так что твои потуги для меня выглядят смешно
Аноним 08/07/23 Суб 09:42:23 2758392 329
>>2758169
В чем профит UserControl'а по сравнению с Page?
Аноним 08/07/23 Суб 09:53:54 2758405 330
>>2758169
> да ты крут. я за десятки лет не знаю нахрена нужен Page если есть юзерконтрол
Для навигации внутри фрейма.
Аноним 08/07/23 Суб 10:45:49 2758419 331
>>2758392
это просто контрол. самый обычный контрол, с которым просто работаешь и не мудришь костыли. навигация делается элементарно и как угодно.
А вот с фрейм+пейдж какая то пляска с бубном
Аноним 08/07/23 Суб 10:54:57 2758421 332
>>2740238 (OP)
Есть одна проблема. Почему то отображается не все содержимое страниц с документацией. Например, на этой странице https://learn.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-7.0&tabs=visual-studio-code должна быть строка Required assets to build and debug are missing from 'RazorPagesMovie'. Add them? но ее не видно. Хотя она есть в исходном коде страницы и в сохраненной копии из гугла. Отключил блокировщик рекламы. В чем может быть проблема?
Аноним 08/07/23 Суб 13:02:32 2758549 333
image.png 68Кб, 984x569
984x569
>>2758421
В том что ты не очень умный
Аноним 08/07/23 Суб 13:50:24 2758610 334
>>2758549
Ну и зачем они удалили это из новой документации? Дебилы.
Аноним 08/07/23 Суб 15:22:16 2758743 335
242422442.png 13Кб, 857x204
857x204
Аноним 08/07/23 Суб 15:27:08 2758747 336
Аноним 08/07/23 Суб 15:30:33 2758752 337
Безымянный.png 109Кб, 1920x1080
1920x1080
Аноним 08/07/23 Суб 15:37:13 2758756 338
db59ftDbX1b-R3B[...].jpg 90Кб, 576x768
576x768
Поясните, кому не в лом, какой аспект языка делает работу на C# настолько проще, что можно позволить себе не использовать C++ ?
Аноним 08/07/23 Суб 15:43:44 2758762 339
Аноним 08/07/23 Суб 15:46:51 2758765 340
Аноним 08/07/23 Суб 15:47:42 2758766 341
>>2758762
static void Main(string[] args)
{
decimal data;
decimal data2;
double a = 35.4;
double a2 = 32.5;

Console.WriteLine("Enter the amount in rubles to buy a dollar.");
data = Console.ReadLine();

decimal result = a * data;

Console.WriteLine("Enter the amount in rubles to sell a dollar.");


}
}
}


Нахуя?
Аноним 08/07/23 Суб 15:52:11 2758773 342
>>2758765
Видос очень тяжело смотреть, хуесос за кадром пять минут тянет сиську под смешные картинки а мыслей интересных нет.

Я работаю в embedded отделе, у нас в разных проектах по нужде или предпочтению обычно юзают:

Verilog/VHDL
Asemmbler
C
C++
Bash
Python

Что я нахуй буду делать с шарпами. Игры писать?
Аноним 08/07/23 Суб 15:52:28 2758775 343
>>2758766
А теперь в бинарном...
Аноним 08/07/23 Суб 15:57:52 2758784 344
>>2758773
>Что я нахуй буду делать с шарпами. Игры писать?
То же что и с
>Verilog/VHDL
>Asemmbler
>C
>C++
>Bash
>Python
как работодатель скажет, на том и будешь писать, и на шарпе и на бейсике будешь, никуда не денешься, раб_отник на раб_оте.
Аноним 08/07/23 Суб 15:58:47 2758786 345
>>2758773
>Видос очень тяжело смотреть, хуесос за кадром пять минут тянет сиську под смешные картинки
Тебе скорость на 1.5 не поставить?

>>2758775
Иди на хуй, пёс подзаборный.
Аноним 08/07/23 Суб 16:01:01 2758788 346
>>2758786
Я старый 30 летний дед скуф.
Мне физически уже тяжело смотреть видео со смешной подачей. Особенно, когда нихуя не смешно.
Я этого говна наелся и меня от него воротит. Это ебаный кринж.
08/07/23 Суб 16:02:59 2758790 347
>>2758743
Жабоскриптера видно издалека.
Аноним 08/07/23 Суб 16:07:50 2758795 348
>>2758786
Твоя хуйня не компилируется! У тебя не может быть бинарника с кодом! Как я тебя подъебал, а? а? а?
Аноним 08/07/23 Суб 16:12:58 2758800 349
16818366683610.webm 1816Кб, 1280x720, 00:00:04
1280x720
>>2758790
Единственное что я написал на жабе было "Hello World!" в 2016 лол.

>>2758790
Ты ебанашка. Я вкатываюсь неделю. Я сути твоего подъёба даже не понял.
Аноним 08/07/23 Суб 16:13:29 2758802 350
>>2758766
Какой тип у тебя в data?
Аноним 08/07/23 Суб 16:15:07 2758810 351
>>2758752
Тебе прямо написано что нельзя СТРОКИ умножать на ДЕЦИМАЛ, что ты вообще ожидал от этой операции?
Второй случай тоже туповат, скасти одно из чисел к типу второго операнда
Аноним 08/07/23 Суб 21:24:43 2759230 352
16618782515680.mp4 283Кб, 480x360, 00:00:06
480x360
54334643664.png 187Кб, 1920x1080
1920x1080
>>2753850
>>2753902
>>2758790
>>2758795
>>2758802
>>2758810
Всё короче, написал. Конвертер трёх знаковых валют в консоли с курсом прямиком из 2007 года (который никто никогда не вернёт) (но я хотя бы попытался). Сам, без чей либо помощи и не списывая с других. Нужно было просто как следует разобраться в типах данных, посидеть и подумать немножко.

Пиздец вы спецы. Не смогли мне, вкатуну, объяснить как написать консольную хуйню уровня первоклашек. Чего там парсить? Чего там скашивать? Всё же просто как в аптеке. Я с вас в акуе короче, двощеры блядь. Но всё равно, спасибо.
Аноним 08/07/23 Суб 21:32:55 2759231 353
Аноним 08/07/23 Суб 21:34:27 2759232 354
Что именно следует знать и уметь по докеру для .net? Что можно почитать/посмотреть? Статьи в документации должно хватить?
Аноним 08/07/23 Суб 21:41:30 2759237 355
Ребята, а правда в разрабом щас хер устроишься? Я за всю свою карьеру проблем никаких не испытывал просто и диву даюсь с того, о чем тут и в ебаном пишут. Лайвкодинги какие-то, тупые вопросы, постоянное изучение технологий…

Сижу на одном и том же ЯПе, в доку по фреймворку заглядываю максимум раз в неделю.
Аноним 08/07/23 Суб 21:44:56 2759240 356
>>2759232

Наверн достаточно знать отличия цмд от ентрипоинт. Тыж шарпист, а не девопс.
Аноним 08/07/23 Суб 21:46:15 2759241 357
>>2759230
подсказать не можем (ты ж не слушаешь)
можем только обосрать

1 короткие имена переменных.
2 спагетти код. ненависть к словарям?
3 а что будет если вместо числа я введу "абырвалг"?
4 а что если люблю вводить 1.2, а иногда 1,2?
5 зачем мне много знаков в результате после запятой? это ж деньги не?
6 хули не децимал
Аноним 08/07/23 Суб 21:59:21 2759245 358
>>2759230
Уффф, у меня от такого рак жопы обострился

>>2759237
> Сижу на одном и том же ЯПе
> постоянное изучение технологий
Развитие это часть работы как бы

> Лайвкодинги какие-то, тупые вопросы
> хер устроишься?
Актуально для джунов
Аноним 08/07/23 Суб 22:01:16 2759246 359
97685675467 (2).png 22Кб, 1566x184
1566x184
>>2759241
>1
И что с того?
>2
Не понял тебя.
>3
Приложение крашнется
>4
Приложение крашнется. Ты кстати в обменном пункте тоже покупаешь или продаёшь не 50 баксов, а 56.8?
>5
После какой запятой?
>6
Не знаю. Ругается чёт и выводит ошибки.
Аноним 08/07/23 Суб 22:01:59 2759248 360
>>2759241
>Уффф, у меня от такого рак жопы обострился
В смысле? Чё не так то?
Аноним 08/07/23 Суб 22:10:11 2759252 361
>>2759245

Прости, я не в тот тред свой пост отправил. Хотел в МВП-тред.
Аноним 08/07/23 Суб 22:34:05 2759263 362
>>2759246
1 поймешь сам когда через год посмотришь на свой код. Ну или коллеги по работе (хотя о чем это я) тебе расскажут...кулаками
2 все это словоблудие можно было оформить словарем валюта-курс и в цикле красиво пройтись
3 как и твоя зарплата
4 в обменном пункте поле мне ЗАПРЕЩАЕТ ввести не то, консоль же позволяет ввести что угодно.
5 деньги это 2 знака после запятой. дальше не очень интересно. дабл же выведет тучу знаков. хот бы округлил до 3 знаков
6 ругается на то что стринг и децимпал перемножаешь? не пробовал децимал * децимал? чет с даблами и интами тебе не мешает перемножать, а с децималами какие трусы стринги у тебя
Аноним 08/07/23 Суб 23:13:47 2759277 363
image.png 245Кб, 1110x1123
1110x1123
image.png 240Кб, 1077x1060
1077x1060
image.png 42Кб, 603x470
603x470
Рэйт мой говняк раз уж такое пошло
Аноним 08/07/23 Суб 23:26:18 2759284 364
09090087.png 113Кб, 1920x1080
1920x1080
>>2759263
Бля, пчел... Ты такой важный прям пиздец. Еще раз мой пост прочитай. >>2753843 Требовалось написать простенькую, консольную хуйнюшку.
>Ну или коллеги по работе (хотя о чем это я)
Ты о том, что я типа работу себе не найду. Все вы айтишники токсичные, аж пиздец.
>коллеги по работе тебе расскажут...кулаками
Я думаю коллеги по работе не вывезут мне что-то на кулаках объяснять.
>2
Ок.
>3
Оййй бляяя... сукааа рукалицо. Токсик ты ёбаный.
>4
Ок.
>5
Не понимаю тебя, но ок.
>6
Не даёт мне среда разработки создать переменную с decimal с нужным мне значением. Подчеркивает красным. Вот видишь? Всё исправил на Децл, но всё равно ошибка, а что это за суффикс "М" я хз.
Аноним 08/07/23 Суб 23:33:22 2759288 365
>>2759284
>написать простенькую, консольную хуйнюшку.
если ты не знаешь базовых типов и зачем они нужны, то ты даже не ждун
>Ты о том, что я типа работу себе не найду. Все вы айтишники токсичные, аж пиздец
о том что за использование децимал любой уважающий себя джун который только полчаса назад узнал что такое си шарп просто бы офигел от твоего кода
>3
а ты учись сразу быть правильным программистом. иначе че сюда пришел?
>Не понимаю тебя, но ок.
ну будь реалистом. пусть результат будет все таки округлен. ну хотя бы до 6 го знака для особых любителей резать коейки на части.
>Не даёт мне среда разработки создать переменную с decimal
ну добавь ты м. жалко что ли
а так среда думает что ты децималу пытаешься присвоить дабл
Аноним 08/07/23 Суб 23:40:47 2759290 366
>>2758788
>Я старый 30 летний дед скуф.
>30 лет

Старость, пиздец.
Аноним 08/07/23 Суб 23:48:09 2759293 367
>>2759277
Ну я так не умею еще. И тем не менее на выходе у меня получилось симпатичнее чем у тебя :3

>>2759288
>то ты даже не ждун
Естественно я не ждун. Я ничего и не жду. Я действую, бро.
>о том что за использование децимал любой уважающий себя джун который только полчаса назад узнал что такое си шарп просто бы офигел от твоего кода
Блядь, так и не использовал децимал. У меня изначально дабл было.
>ну будь реалистом. пусть результат будет все таки округлен. ну хотя бы до 6 го знака для особых любителей резать коейки на части.
Я не знаю как округлить. Да и зачем? У меня ведь всё равно получилось так, как в настоящем конверторе.
>ну добавь ты м. жалко что ли
а так среда думает что ты децималу пытаешься присвоить дабл
Да, добавил. Теперь нет ошибки. Спасибо.
Аноним 09/07/23 Вск 00:09:03 2759298 368
>>2759293
>Я ничего и не жду. Я действую, бро.
действовать нужно в правильно направлении. иначе зачем

>Блядь, так и не использовал децимал. У меня изначально дабл было.
А ЧЕ? если речь идет про денежку (которой тебе никогда не видать) то сразу нужно децимал. в общем то он для этого и придуман
>Я не знаю как округлит
бедный человече забаненный в гугле. Зачем? ну давайв мгазе требуй "а где тысячные в сдаче? вы тут охуели что ли"
>Да, добавил. Теперь нет ошибки. Спасибо.
А неважно. камень в твой огород заготовлен (иначе бы я спал) так лови.
Аноним 09/07/23 Вск 00:19:58 2759300 369
>>2759277
1. Сокращения. Нахуй и в пизду. Пиши полностью.
2. new() - лучше только для инициализации полей класса, в остальных случаях нихуя не очевидно что там за new
3. Копипаст, который можно было заменить goto
4. Магические числа
5. var в результатах математических операций - я бы уже позвонил хрюше и стал просить нового джуна искать
6. Копипаст
7. Парсинг зависящий от культуры, вместо того чтобы сделать универсальный парсер, который от этой самой культуры не будет зависеть
8. Листы там где лучше подошел бы словарь

Но да. Ты хотя бы стараешься и как минимум автоформатирование настроил. Это плюсик и я уже тебя не ненавижу.
Аноним 09/07/23 Вск 00:28:46 2759303 370
>>2759300
> goto
ебанутый...
как тебя вообще серьёзно то воспринимать после такого?
Аноним 09/07/23 Вск 00:41:48 2759311 371
>>2759303
ну есть 2 случая когда готу реально рулит (я правда их не помню, но точно они есть - один из них break N а второй не помню)
так что он не совсем ебаунутый
Аноним 09/07/23 Вск 01:20:29 2759325 372
.png 8Кб, 476x273
476x273
>>2759303

Ну, давай, няша. Показывай как ты красиво и элегантно без goto будешь делать такое.

А теперь серьезный ответ.
1. goto - нормальная практика, если он улучшает читаемость кода. Если ты умняша, который делает методы по 10к строк, то отсутстве goto не спасет тебя, а только хуже сделает.
2. В шарпе - goto - кастрирован до такой степени, что все претензии, которые к нему возникали в свое время - просто не релевантны.
3. Если уже про более лоулевел будем говорить, ну, давай, покритикуй мне jmp и покажи как ты без него что-то в принципе полезное напишешь
4. Если так уж доебываемся до goto, то давайте как у MISRA - еще и срать на continiue, break, рекурсию, динамическое выделение памяти и т.д.. Ну, хули, тоже пиздец плохие практики же. Вдруг наш код шарповский в какой-нибудь автомобиль засунут, а там рекурсия, памяти контроллеру не хватит и все, пиздец, убили человека.

Короче. Если goto делает код лучше - использовать я разрешаю.
Аноним 09/07/23 Вск 01:26:16 2759330 373
.jpg 63Кб, 756x726
756x726
>>2759303
Как майков можно серьезно воспринимать после такого? Срочно отказываемся от использвования стандартной библиотеки дотнета и переписываем без goto
Аноним 09/07/23 Вск 01:47:46 2759340 374
>>2759330
покажи мне break N без готу и я это обосру )
Аноним 09/07/23 Вск 01:55:11 2759344 375
>>2759330
>удалить
>запритить
Всегда знал и говорил, что Майкрософт - оплот свободы в этом мире рабства. Лишний повод пользоваться только их продуктами, хотя оно и так очевидно, альтернативы лютое говно: винда, офис, студия, что ни возьми, одни блистательные вины от подобий которых от других только блевать тянет от убожества, хуже китайских подделок.
Аноним 09/07/23 Вск 07:45:53 2759373 376
b55fa50b-f9c3-4[...].jpg 46Кб, 735x412
735x412
Аноним 09/07/23 Вск 12:32:44 2759572 377
>>2759344
>Майкрософт
Лидер по количеству опенсорс проектов.
Аноним 09/07/23 Вск 13:06:49 2759622 378
>>2759572
А хули не опенсорсить, если одна половина мира сотрудники микрософт, а другая его клиенты. Тупо упрощение и удешевление процесса разработки. Они где-то там внизу конкурируют между собой, непрерывно перетекая из одной группы в другую...
Аноним 09/07/23 Вск 13:50:13 2759662 379
>да ты крут. я за десятки лет не знаю нахрена нужен Page если есть юзерконтрол
Лично я столкнулся с отличиями когда пытался забиндить какой-то экземпляр к свойству собственного класса на базе Page. Чтобы я не делал, но элемент внутри тупо отсутствовал. И добродушный анон подсказал в чем особенность. Вот, передал так сказать знания по наследству.

>>2758392
>В чем профит UserControl'а по сравнению с Page?
Скорее наоборот. Юзер контрол это просто минимальная(почти) основа для твоего контрола. Ничего не мешает делать свой контрол на основе Grid, к примеру.

Особенность Page в изолированности содержимого, часто это используют для безопасности в браущерах, чтобы случайно какое-то говно не пролезло наружу или внутрь.
Аноним 09/07/23 Вск 20:25:28 2760135 380
>>2756987
pragma warning disable не думал использовать, умник хуев
Аноним 09/07/23 Вск 20:29:25 2760144 381
>>2756987
> Что я могу поделать, если интерфейс ICommand требует реализацию CanExecuteChanged event, но мне оно не требуется?
Использовать готовые mvvm либы, а не писать велосипеды
Аноним 10/07/23 Пнд 00:58:13 2760358 382
>>2760144
Так чё, в реализациях готовых MVVM-либ забивают на варнинги?
Аноним 10/07/23 Пнд 05:38:27 2760400 383
>>2760358
Ненужные варнинги отключаются одним кликом мышкой, причем локально для нужного кода.
Аноним 10/07/23 Пнд 05:39:49 2760401 384
>>2756987
Реализуй его явно, делов то
Аноним 10/07/23 Пнд 13:51:46 2760739 385
Такая проблема. Допустим есть два разных класса из двух разных библиотек, написанных в разное время. У них есть по интерфейсу, где есть пересекающееся по сути свойство, но по разному названное. К примеру

public interface IHuinya
{
. . . int HuinyaCount
}

public interface IDrugayaHuinya
{
. . . int DrugayaHuinyaCount
}


И теперь, в моем классе есть свойство, которое им необходимо
public class MyClass
{
. . . int Count
}

но не может удовлетворить из-за конфликта имени, даже если я переименую в пользу одного из интерфейсов. В бейсике я мог указать явно реализацию, что-то вроде
int Count : IDrugayaHuinya.DrugayaHuinyaCount, IHuinya.HuinyaCount
И тогда не важно какое имя в классе. А как быть с этим в шарпе?
Аноним 10/07/23 Пнд 13:58:08 2760752 386
>>2760739
На сколько знаю только враппер писать
Аноним 10/07/23 Пнд 14:03:56 2760756 387
image.png 45Кб, 490x553
490x553
Аноним 10/07/23 Пнд 16:23:19 2760901 388
>>2760756
А, вот как. Понял, спасибо.
Аноним 10/07/23 Пнд 16:41:14 2760934 389
2023-07-1016-09[...].png 50Кб, 1398x378
1398x378
2023-07-1016-28[...].png 14Кб, 799x74
799x74
Ни разу не юзал прикрепляемые свойства и тут возник ступор.

Пикрил 1 - это прикрепляемое свойство, которое хочет получить объект типа ListView. Есть регистрация свойства и есть подписка на событие изменения свойства.

Пикрил 2 - я пытаюсь в экземпляре ListView привязать самого себя к данному свойству.

После того, как из пикрила 1 отрабатывает метод
OnTargetChanged(
. . . DependencyObject d,
. . . . . . DependencyPropertyChangedEventArgs e)


по аналогии с обычным DependencyProperty, я ожидаю что в параметре d я увижу экземпляр класса, в котором находится прикрепляемое свойство, а в параметре e.NewValue - экземпляр ListView.

Но на деле я получаю ответ:
* OnTargetChanged. d: ListView, NewValue: ListView

По какой-то причине DependencyObject здесь тоже ListView. В принципе причина логична, но вообще возможно ли получить экземпляр класса, в котором прикрепяемое свойство находилось изначально? Зачем я вообще при регистарции указывал другой класс?
Аноним 10/07/23 Пнд 17:38:16 2761067 390
>>2760934
> по аналогии с обычным DependencyProperty, я ожидаю что в параметре d я увижу экземпляр класса, в котором находится прикрепляемое свойство,
Ну тут вопрос в том, почему ты это ожидаешь. Прикрепленное свойство, ровно как и обычное, возвращает экземпляр объекта, у которого оно было изменено.
> но вообще возможно ли получить экземпляр класса, в котором прикрепяемое свойство находилось изначально?
Насколько я знаю нет.

> Зачем я вообще при регистарции указывал другой класс?
Чтобы среда знала, где искать геттер и сеттер.
Аноним 10/07/23 Пнд 18:58:38 2761182 391
>>2761067
Ну штош, жаль что нельзя. Спасибо.
Аноним 10/07/23 Пнд 21:25:00 2761415 392
Вы фронтенд для ASP учите? Или чисто ищете бэк вакансии? Как я заметил как минимум 50% вакансий требуют умения писать фронт. А иногда еще и Razor, лол.
Аноним 10/07/23 Пнд 21:29:51 2761428 393
>>2761415
Бэк + немного фронта. Один хрен веб уже слишком разросся и отрицать его глупо
Аноним 10/07/23 Пнд 21:47:06 2761463 394
>>2761428
Спору нет конеш, но даже на пхп меньше вакансий, где требуют знание frontend-технологий, а зп такая же, вакансий больше. Зачем вам здался этот шарп? Вы же в России живете, а не там. Выбирайте по делу, а не по желанию и будете с пирогом, а если нет - будете сосать бибу.
Аноним 10/07/23 Пнд 22:19:25 2761520 395
>>2761463
> и будете с пирогом, а если нет - будете сосать бибу.
Сижу с пирогом ещё и нравится стек что как хобби на нём же
Аноним 10/07/23 Пнд 23:46:20 2761606 396
Я правильно понял, что залётный пхпшник - это на самом деле жабадебил?
Аноним 11/07/23 Втр 07:02:05 2761701 397
>>2761415
>Или чисто ищете бэк вакансии
This. На шарпе сейчас достаточно проектов с микросервисами в которых либо вообще нет фронта, либо он таков, что проще нанять одного-двух фронтедеров которые будут его вести, вместо распыления на это дело ресурсов кучи бэкендеров.
Аноним 11/07/23 Втр 10:40:11 2761786 398
>>2761463
>Вы же в России живете, а не там
Я живу там так что мне можно изучать шарпы
Аноним 11/07/23 Втр 15:04:00 2761989 399
>>2761606
Поебать + похуй, но чел потерял берега. И учитывая его пристрастия к политоте, таким шизоидам не впервой всюду лезть и ебать мозги мнением, которого не спрашивали.
Аноним 11/07/23 Втр 16:01:53 2762064 400
изображение.png 111Кб, 1681x377
1681x377
Нахуя?
Аноним 11/07/23 Втр 16:33:21 2762120 401
>>2762064
Здорово, что в интерфейсах можно писать бизнес-логику. Не могу дождаться, когда в интерфейсы добавят статические конструкторы.
Аноним 11/07/23 Втр 19:57:52 2762329 402
Всем привет. Хочу пополнить портфолио парой проектов на asp за это лето, но что-то толковое на ум не приходит. Подскажите пожалуйста что-нибудь
Аноним 11/07/23 Втр 20:01:40 2762336 403
>>2762329
> портфолио
Потратишь овердохуя времени впустую. Никто не смотрит вкатунские гитхабы.
Аноним 11/07/23 Втр 20:14:01 2762349 404
>>2762336
Да мне сейчас в принципе важнее любая практика. Но раз уж об этом, то на что хры смотрят?
Аноним 11/07/23 Втр 20:18:45 2762355 405
>>2762349
Практика - это не портфолио. В учебных целях можешь написать, к примеру, имиджборду.
Хры смотрят на то, где учился и какие у тебя хардскиллы.
Аноним 11/07/23 Втр 20:23:49 2762359 406
>>2762355
Тогда будет ли нормальной практикой написать браузерный IRC клиент? То есть помимо всего прочего подразумевается реализация уже существующего протокола.
Аноним 11/07/23 Втр 20:30:41 2762365 407
>>2762359
Да, пофиг что писать, можешь брать идеи хоть из картинки pro/g/ramming challenges.
Аноним 12/07/23 Срд 00:33:27 2762554 408
image.png 1321Кб, 1284x949
1284x949
Сегодня узнал, что на С# можно писать драйвера под шиндоус. Ебало крестовиков скомпилировали? Походу скоро шарпуха станет реально всеобъемлющим япом.
Аноним 12/07/23 Срд 00:40:15 2762560 409
>>2762554
Чё там по драйверам на линупс?
Аноним 12/07/23 Срд 01:43:06 2762592 410
Зашёл в поиск, ни одного треда по F#. Из местных, может, увлекается кто-нибудь?
Аноним 12/07/23 Срд 02:59:31 2762601 411
>>2762592
Так же как и с бейсиком — ИТТ мимикрируешь под шарписта и все охуевают от твоей странности.
Аноним 12/07/23 Срд 03:07:24 2762602 412
Аноним 12/07/23 Срд 03:17:24 2762606 413
>>2762554
Ну таки в ансейфе можно дикую анальную эквилибристику устраивать вплоть до оптимизаций через ссе/авх/етц...

>>2762560
Видел что под линью тестили дрова для сетевухи на жабе/шарпе/расте/другом говне. Должно гуглиться репо на гитхабе. Проект был года 2 может назад
Аноним 12/07/23 Срд 03:39:46 2762609 414
>>2762606
> в ансейфе можно дикую анальную эквилибристику устраивать вплоть до оптимизаций через ссе/авх/етц...
Я как-то попробовал "просто" вставить нативный код с винапи, так понадобилась анальная эквилибристика с пробрасыванием в C++/CLI. При этом оно запускалось без возражений, но не действовало, кончилось тем, что я просто кинул в папку нормальный экзешник скомпиленный на нормальном С++. Кошмар. Динамикодрисня и нативный код это взаимоисключающие понятия. Что бы там ни кукарекали маркетолухи: "мы не хуже, слышите, не хуже!". Да, вы не хуже, потому что вы днище к которому понятие сравнения неприменимо, слишком велика пропасть разницы.
Аноним 12/07/23 Срд 04:07:32 2762613 415
>>2758756
Почитай .NET API, посмотри самые популярные библиотеки и фреймворки.
Аноним 12/07/23 Срд 05:44:41 2762623 416
кофе-грусть-печ[...].jpeg 36Кб, 720x673
720x673
Смотрю после гречневой работы уроки C#. Мечтаю вкатиться. Нет каких-нибудь идей, как найти подработку на выходные в около айти, но чтобы капали какие-то реальные деньги, пусть хоть 20 рублей в час?
Аноним 12/07/23 Срд 05:52:00 2762624 417
>>2762623
Как вкатиться на гречневую работу? Заебало айти. Вы то там в 9 пришли в 6 ушли и голова не о чем не болит, а мне с 8 до 8 сидеть, еще и на выходных выходить, если не успеваю.
Аноним 12/07/23 Срд 06:54:32 2762632 418
А в чем прикол вашего "шарпа"? Тут даже множественной наследования нет как в Python. Как по мне Python лучше чем шарп во всём асболютно. И коммунити не такое токсичное и библиотек дохера различных, фреймворков куча, синтаксис кайфовый, дизайн языка божествененн.
Аноним 12/07/23 Срд 07:18:38 2762648 419
Сап, двач, реквестирую советов мудрых.

Учу изучаю пытаюсь в "программирование" полностью самостоятельно (молодость просрал, курсами не пользуюсь), но цель не стать программистом (хотя кому я пижжу, хотелось бы, просто понимаю, что уже всё проебал), а научится делать более-менее хорошо для себя, мечтал пилить всякое ещё со школы, но как-то некогда было просрал время впустую.

Так вот совет нужен как научиться делать более-менее хорошо. Есть у меня микроидея, на которой я учусь, так сказать, но я её миллион раз начинал заново, потому что каждый раз осознаю, что получается не оче и хочется лучше, постоянно пытаюсь придумать, как исправить/переделать, чтобы было заебись (для моего плинтусного уровня, само собой). Я не стремлюсь сделать прям "идеально", а просто хорошо.

Сейчас это просто монолитное однопользовательское однопоточное приложение на ВПФ с бинарной сериализацией. Хочется как минимум перейти на ЕФ и выделить из приложения бизнес-логику/домен (если я правильно понимаю эти... пусть будут термины), в общем сделать так, как делают цивилизованные белые люди, но я хз как научиться. Может есть хороший материал на почитать? Или законченный проект, в сорсах которого можно покопаться? Я какие-то находил, но там всё куцо, ужато и вопросов возникает больше, чем ответов.


тлдр: ткните в проект на ВПФ с МВВМ с ЕФ и ДДД.

Спасибо.
Аноним 12/07/23 Срд 08:34:21 2762696 420
>>2762632
Вот и уёбывай в свой петухон.
Аноним 12/07/23 Срд 09:24:46 2762716 421
>>2762632
>А в чем прикол вашего "шарпа"?
Чтобы программировать, дурачок. А для pip install "либа написанная на C нейм" есть петухон, да.

>Множественное наследование
Собственно, все что нужно знать про петухон.
Аноним 12/07/23 Срд 09:33:38 2762722 422
>>2762632
>Тут даже множественной наследования нет как в
И нахуя оно нужно? Тут и с обычным наследованием макаки умудряются такого наговнокодить, я представляю какое говно они выдадут с множественным.
Аноним 12/07/23 Срд 09:42:41 2762728 423
MediatR еще пользуются?
Зачем он нужен?
Аноним 12/07/23 Срд 09:48:50 2762733 424
Аноним 12/07/23 Срд 09:55:42 2762738 425
Пилю десктопную программу для просмотра картинок. Пока что решение состоит из нескольких проектов:
- Проект с сущностями для базы данных
- Проект для работы с локальными данным
- Проект для работы с различными api
- Проект с сервисами, который взаимодействует с двумя вышеназванными проектами
- Проект с интерфейсами, на который ссылаются все проекты за исключением проекта с бд.
- И наконец проект с гуем, который работает с сервисами из соответствующего проекта.
Все правильно сделал?
Аноним 12/07/23 Срд 11:02:55 2762780 426
>>2762738
>программу для просмотра картинок
>базы данных
>различными api
>сервисы
Жирно.
Аноним 12/07/23 Срд 11:04:56 2762782 427
>>2762780
Что жирного? Картинки можно будет просматривать не только из локальных директорий, но и со всяких бур. База данных для присваивания картинкам тегов.
Аноним 12/07/23 Срд 11:10:45 2762788 428
Аноним 12/07/23 Срд 12:00:51 2762854 429
изображение.png 12Кб, 420x82
420x82
Пиздос. Сейчас читаю Албахари в русском переводе ангельский примерно на A1. Так вот, перевод ебаное говно, так ещё и очепятки есть.
Аноним 12/07/23 Срд 12:50:19 2762889 430
2023-07-1212-39[...].png 14Кб, 501x226
501x226
Слушайте, ни у кого нет данного бага? Периодически отваливается xaml часть от код бихайнд. К примеру пикрилейтед, инициализация компонента, все переменные в xaml, к которым я обращаюсь по имени — не видны.

Лечится тем, что я захожу в файл <проджект_нейм>.csproj.user и чет там меняю, к примеру добавляя строку или пробел. Я думал это проблема бейсика, но в шарпе эта залупа тоже прослеживается. Обновление предпоследнее (если считать вышедшее 13ч назад).
Аноним 12/07/23 Срд 12:51:50 2762892 431
>>2762889
Это норма. Перезагрузи проект, должно помочь.
Аноним 12/07/23 Срд 12:54:48 2762894 432
>>2762892
Вот перезагрузка точно не поможет. Точнее, ошибка не будет возникать пока я не открою проблемный файл (и будет пропадать, как только его закрою). Чтобы в принципе исключить проблему, нужно чтобы студия обновила .csproj.user
Аноним 12/07/23 Срд 14:57:23 2763002 433
image 67Кб, 601x766
601x766
>>2762120
>Не могу дождаться, когда в интерфейсы добавят статические конструкторы.
Аноним 12/07/23 Срд 15:04:06 2763016 434
>>2763002
Объясни что здесь происходит
Аноним 12/07/23 Срд 15:11:51 2763036 435
image 80Кб, 539x830
539x830
>>2763016
Можно объявлять абстрактные (и виртуальные конечно тоже) статические методы в интерфейсе, которые обязан имплементить тип.
Это сделано для дженерик математики, но чувствую скоро мы увидим большое разнообразие применение данной фичи. Так сказать во всех галерах мира
Аноним 12/07/23 Срд 16:05:33 2763108 436
>>2763036
А что это за серые подписи сверху заголовков? Статистика наследования, использования и прочее. Как это включить?
Аноним 13/07/23 Чтв 00:26:13 2763760 437
>>2763108
это code vision в райдере
Аноним 13/07/23 Чтв 11:33:48 2764109 438
01.png 47Кб, 544x840
544x840
Почему мой говнокод так странно работает? Была идея заполнять массив в цикле foreach. Нагуглил, что для этого нужна отдельная переменная, которая используется как индекс для записи в массив. Ну да, это работает. Второй цикл показывает, что и по индексу и по перечислителю возвращается одно и тоже значение. Но почему в первом цикле, перечислитель постоянно выдает 0, хотя индекс показывает, что значение уже присвоено?
Аноним 13/07/23 Чтв 12:56:21 2764226 439
>>2764109
потому что при
foreach(int elem =
в elem было СКОПИРОВАНО значение ячейки из массива. И что там с массивом дальше происходит - ей до одного места, она ссылается на копию. ДАЖЕ если то будет ссылочный тип - все равно это будет КОПИЯ ссылки.

нужен ref чтобы ссылалось именно на ячейку в массиве и видело изменения.
Аноним 13/07/23 Чтв 13:16:39 2764244 440
>>2764109
>>2764226
>ДАЖЕ если то будет ссылочный тип - все равно это будет КОПИЯ ссылки.
И что? Любые копии ссылок - равнозначны, ссылаются на одно и то же. У тебя так устроена файловая система на компьютере. Имена файлов это лишь ссылки, обычно ссылка одна, но ничто не мешает сделать еще, и они все будут одинаковые, везде тот же самый файл - один.
Аноним 13/07/23 Чтв 13:41:16 2764276 441
>>2764109
1) Если тебе в foreach понадобился индекс для элемента коллекции - значит код изначально неправильный, переделывай. Это не значит, что так делать совсем нельзя, но это явно не твой кейс и ты даже близко не подошел к темам где это может понадобиться.
2) Вообще использовать foreach для массивов такое себе. Используй for и не выебывайся. Да и само использование массивов - тоже не айс. Учись сразу пользоваться коллекциями.
3) Foreach не используется для изменения содержания коллекции, только для работы с конкретными элементами и изменения их. Если тебе эта фраза кажется странной, то ты еще не дорос. Возвращайся к изучению, что такое коллекции, как работает итератор и отличию reference types от value types.
Аноним 13/07/23 Чтв 14:06:19 2764297 442
>>2764276
>3) Foreach не используется для изменения содержания коллекции
Используется, есть .ToList() делающий копию которую перебирает foreach, с помощью ссылок из которого манипулируешь настоящим списком.
Аноним 13/07/23 Чтв 14:27:47 2764310 443
>>2764244
>И что? Любые копии ссылок - равнозначны, ссылаются на одно и то же
ссылаться они будут на одно.
но сами ссылки разные. они чисто физически лежат в разных местах памяти. Один объект в куче и 1000 ссылок на него лежат в 1000 разных мест.

>У тебя так устроена файловая система на компьютере
2 ярлыка на рабочем столе ведущих на 1 файл - все равно физически 2 разных ярлыка. И если ты изменишь 1 ярлык, то второй ярлык об этом ни сном ни духом

ВСЁ ВСЕГДА копируется. Независимо от того ссылочный тип или значимый. Поэтому при передаче ссылочного типа (без ref) в метод ты не можешь перезаписать этот объект чтобы он изменился и за пределы метода. Ты всего лишь перезаписываешь ячейку памяти куда была скопирована ссылка.

Так и переменная elem хоть и знает о значении (или ссылке) что лежал в массиве, но ничего не знает про про память массива и если память массива будет изменена, то откуда ей об этом знать.

для этого есть ref locals - вот он позволяет сослаться на конкретную ячейку памяти без копирования значения этой ячейки.
Аноним 13/07/23 Чтв 15:04:22 2764331 444
02.png 58Кб, 591x788
591x788
>>2764276
Это я и так знаю. Я же не спрашивал почему elem=10 выдает ошибку. Вопрос больше теоретический.

>>2764226
>>2764310
А вот тут не понятно. С одной стороны, похоже это действительно так и работает. Если предварительно инициализировать массив, то Console.Write(elem) начинает выдавать именно эти значения. И что тогда получается? foreach создает копию значений всех элементов массива? Такого быть не должно. Массив же ссылочный тип. А если в нем миллион элементов, и что, в кажом foreach каждый раз будет создаваться миллион копий?
Аноним 13/07/23 Чтв 15:18:47 2764341 445
>>2764331
одна копия создаётся на каждом цикле
если у тебя массив из миллиона элементов, в итоге, у тебя будет миллион копий, но в конкретный момент времени будет лишь одна, если ты её не сохранишь где-нибудь ещё конечно
Аноним 13/07/23 Чтв 15:54:40 2764411 446
>>2764341
>в итоге, у тебя будет миллион копий, но в конкретный момент времени будет лишь одна
Ну то есть он типа по очереди копирует каждый элемент в одну и туже переменную? Все равно как-то не очень. Получается по памяти может расход и не большой, а по времени в целом в конце концов выходит тоже самое, что скопировать весь массив в новое место.
Аноним 13/07/23 Чтв 15:56:47 2764416 447
>>2764331
>Такого быть не должно. Массив же ссылочный тип.
Учи базу чтобы таких вопросов не было.
Аноним 13/07/23 Чтв 16:00:28 2764428 448
>>2764411
>а по времени в целом в конце концов выходит тоже самое, что скопировать весь массив в новое место.
С байтоебством тебе в C++
Аноним 13/07/23 Чтв 16:06:24 2764438 449
>>2764297
То что там ToList под капотом делает вообще поебать. По факту ты все равно получишь новую коллекцию, а старая останется неизменной. Нельзя внутри foreach делать какие-либо манипуляции с наполнением самой коллекции. С отдельными элементами на которые у тебя в коллекции ссылки можно делать что угодно, а вот заменять/удалять/добавлять сами ссылки в коллекцию - нельзя, только собирать новую.
Аноним 13/07/23 Чтв 16:32:37 2764491 450
>>2764331
>Массив же ссылочный тип
какая разница если фореач на каждой итерации работает с ЭЛЕМЕНТОМ массива, а не с массивом
так что если в нем миллион элементов, то да, будет миллион итераций и на каждой будет создана копия значения очередной ячейки массива.
Аноним 13/07/23 Чтв 16:36:32 2764500 451
>>2764411
>что скопировать весь массив в новое место.
тебе копировать или работать с элементами?
не нравится - не копируй, работай через for, плоди ref. Вот только это стоит того только если у тебя там большие структуры или очень очень горячий кусок.

Вон при каждом вызове метода, коих в коде миллионы могут быть, тебя же не смущает копирование параметров...и ты не пишешь поэтому одну гигантскую 10000строчную портянку (хотя судя по скрину пишешь )))
Аноним 13/07/23 Чтв 16:44:53 2764516 452
>>2764500
>Вон при каждом вызове метода, коих в коде миллионы могут быть, тебя же не смущает копирование параметров...
джит смущается и где надо сделает портянку
Аноним 13/07/23 Чтв 16:51:49 2764535 453
>>2764516
нет не сделает. даже если его попросить сделать "агрессивный инлайн", то все равно далеко не всегда сделает.

тут вам не котлин с его настоящими инлайн функциями
Аноним 13/07/23 Чтв 16:54:42 2764545 454
>>2764535
значит там "не надо"
Аноним 13/07/23 Чтв 17:32:51 2764656 455
00098989876.png 108Кб, 1920x1080
1920x1080
Анчебусы, осваиваю "If", "Else".
Как сделать так, чтобы на экран консоли выводился текст в скобке, а не просто "true"?
Аноним 13/07/23 Чтв 18:15:51 2764716 456
>>2764656
У тебя там и будет выводиться твой текст.
Аноним 13/07/23 Чтв 18:30:05 2764730 457
>>2764716
Да не выводится у меня в консоли ничего кроме true.
Аноним 13/07/23 Чтв 18:31:29 2764734 458
Аноним 13/07/23 Чтв 18:44:56 2764751 459
>>2764734
Что я запустил? Мне нужно чтоб текст в скобках в консоли отображался, а этого не происходит.
Аноним 13/07/23 Чтв 18:50:04 2764763 460
>>2764751
Ты не то запускаешь. См. справа Обозреватель решений. У тебя по умолчанию Test запускается, а тебе нужен Test_2.
Аноним 13/07/23 Чтв 18:52:35 2764765 461
Всё, сам разобрался в чём причина. Просто в одном и том же решении у меня два проекта и я не тот проект запускал при нажатии F5 лол.
Аноним 13/07/23 Чтв 18:53:07 2764767 462
>>2764763
Да да, я уже сообразил. Спасибо.
Аноним 13/07/23 Чтв 22:54:31 2765127 463
>>2740238 (OP)
Привет, може ли как-то GC влиять на стек или он только кучу чистит?
Аноним 13/07/23 Чтв 22:58:36 2765129 464
>>2765127
Так то в любом языке сборщик занимается только кучей. Что конкретно тебя заставило сомневаться, что в C# это не так?
Аноним 13/07/23 Чтв 23:09:51 2765138 465
Аноним 13/07/23 Чтв 23:15:42 2765143 466
>>2765129
>>2765138
Хотя я туплю, спан же на память которая в куче смотрит, завтра... Спать пойду уже
Аноним 13/07/23 Чтв 23:16:26 2765145 467
>>2765138
Нет не оговорился. Span-ы это указатели на область памяти, а не на стек. И потому GC знает про span чтобы уплотнять память и не похерить их.
А вот в старом дотнете они сделаны через костыли - там неполноценные span
но там же некрофилы
Аноним 13/07/23 Чтв 23:26:51 2765148 468
>>2765145
За то некрофилы умеют в Thread.Abort() и AppDomain.CreateDomain(), чел.
Аноним 13/07/23 Чтв 23:35:04 2765151 469
Кто-нибудь хостил clr? Можете научить?
Аноним 13/07/23 Чтв 23:42:50 2765155 470
Аноним 13/07/23 Чтв 23:45:29 2765159 471
>>2765151
что в твоем понимании "хостить clr"?
какая то магия?
Аноним 13/07/23 Чтв 23:47:10 2765160 472
>>2765148
Аборты запрещены xD
А что делает, поток прерывает? Почему запретили?
Аноним 13/07/23 Чтв 23:48:36 2765162 473
>>2765159
Хочу рантайм который не падает от необработанного исключения в async void в пользовательском коде.

Я не понимаю, почему нет возможности через конфигурацию переопределить это поведение, без пердолинга на плюсах.

То есть async void существует, Assembly.Load() существует, Activator.CreateInstance() существует. А блядскую политику поведения при необработанном исключении, для собственного домена, переопределить нельзя. Без пердолинга на плюсах.
Аноним 13/07/23 Чтв 23:52:50 2765166 474
>>2765160
Скорее всего из за мультиплатформенной парадигмы. А может потому что домохозяйкам не положено безусловно убивать потоки, которые могут оставить после себя неосвобожденные ресурсы.
Аноним 14/07/23 Птн 00:22:48 2765191 475
>>2765160
запретили потому что нет гарантий сохранить валидное состояние программы. Альтернатив не дали.

>>2765162
Нуууу.
Я дам тебе только направление
Ты знаешь про AppDomain.CurrentDomain.UnhandledExceptio, который если сработал, то "наши полномочия всё"
Также TaskScheduler.UnobservedTaskException не работает потому что async void не рождает Task и в общем то негде исключение рождать.

Однако в WPF есть
Dispatcher.UnhandledException и потом Application.Current.DispatcherUnhandledException
и вот внезапно Dispatcher.UnhandledException поймать можно и сделать у него e.Handled=true

Как я понял, исключение для async void рождается в текущем SynchronizationContext, а значит если у тебя не WPF, то задай свой SynchronizationContext
Я попробовал даже .ConfigureAwait(false); и все равно ловит

Про TaskScheduler.UnobservedTaskException также не забывай - в него прилетит если у тебя обычный забытый таск (даже внутри async void)

Еще в классе Dispatcher есть UnhandledExceptionFilter

В общем покопайся в исходниках класса Dispatcher и на тебя снизойдет просветление, что нужно брать котлин - там скриптинг искаропки
Аноним 14/07/23 Птн 01:02:56 2765205 476
>>2765191
Есть кастрированный аналог - Thread.Interrupt()

А если поток выполняющий пользовательский код не Dispatcher?

>задай свой SynchronizationContext
Спасибо за совет. Можешь код показать?
Аноним 14/07/23 Птн 01:31:26 2765214 477
>>2765205
Нет. Я не знаю как решать твою задачу.
Мне понятно только одно - в случае async void исключение будет выброшено в текущем SynchronizationContext.

Я хз как Dispatcher разбирается когда исключение является именно unhaтdled. Ну ладно у него там 1 поток в котором он работает, а тебе нужно мудрить SynchronizationContext с бэкендом на тредпуле и хз как тут быть.

Даже если ты разберешь исходник класса Dispatcher (а то и вообще весь его просто перенесешь) и поймешь че да как, то все равно легко запустить async void без контекста и все упадет.
Аноним 14/07/23 Птн 19:26:55 2766197 478
Аноны, как лучше прокачать себе Шарп и асп.нет? Где найти задачи, кроме литкода, на литкоде говно не имеющее отношения к реальной жизни :(
Аноним 14/07/23 Птн 19:43:35 2766221 479
>>2766197
Хутиу какаю-нибудь одному тебе интересную говнокодить. Потом рефакторить и опять говнокодить. И так покругу.
Аноним 14/07/23 Птн 20:49:04 2766304 480
>>2766197
да все просто
напиши свой двач, свой твиттер, свой фейсбук, свой вк
пересади на них весь мир и сможешь использовать их в портфолио и устроиться на на работу за 25тыс
Аноним 14/07/23 Птн 22:22:31 2766388 481
>>2766197
С прошлого треда:
1) Электронная очередь. Учитывая все ньюансы. От выдачи номера, до распределения к кому из операторов клиент попадет на обработку, с учетом того, что задачи у посетителей могут быть разные и что у операторов тоже разная области ответственности. И все должно идти ровно и без долгих простоев. Если делать по честному от и до, то сможешь проработать дохуя ньюансов, о которых не стыдно будет рассказать.
2) Роутинг электронных сообщений. Это когда в какой-нибудь каталог на диске или сетевую шару постоянным потокам сыпятся xml-ки в охуительных объемах и их нужно оперативно оттуда разбирать, обрабатывать согласно бизнес-процессу и передавать дальше, попутно сохраняя нужную инфу в БД и выкидывая нужные ссобщения. Тут тоже дохуя приколов от многопотока, до разбора ЭС и т.д. И как бы тупо это не звучало, но это до сих пор стандарт и куча B2B взаимодействия происходит в таком виде (да-да никаких очередей вам сучечки). Поэтому нужно не просто уметь делать такие вещи, а делать их быстро и эффективно. Вплоть до того, что тебе тупо могут дать xml-ну на несколько тысяч строк и без всяких спеков и xsd схем и ты должен уметь ее разобрать и встроить это в существующий БП.
Аноним 14/07/23 Птн 22:40:53 2766411 482
>>2766388
1. Пиздец. Кто мне тз на это всё напишет?
2. То же самое, плюс нихуя не понятно про "охуительные объёмы". Гигабайт в секунду? Тысяча xml по гигабайту каждый в секунду?
Аноним 14/07/23 Птн 23:21:13 2766487 483
>>2766411
>1. Пиздец. Кто мне тз на это всё напишет?
Вот заодно и в этом тоже и потренируешься. Если ты думаешь, что на реальной работе тебе кто-то будет составлять ТЗ описанные более подробно чем здесь >>2766388 , то ты ошибаешься.
Просто зайди на почту или в любую другую контору в которой где есть очердь по талонам, посмотри как там все происходит и сделай что-либо подобное.
>>2766411
>2. То же самое, плюс нихуя не понятно про "охуительные объёмы". Гигабайт в секунду? Тысяча xml по гигабайту каждый в секунду?
Ну возьми для начала штук 3 миллиона в день, с пиком в тысяч 100 в час. XML достаточно килобайт по 20 там не размер важен,а содержание, плюс уметь это разбирать так, чтобы потоки друг с другом за файлы не дрались. Для примера можешь взять, ну хуй знает, ЭТРН какой-нибудь и попробовать доставать из него часть информации и формировать на их основе какие-нибудь свои данные, плюс можешь потренироваться подписывать, проверять подписи на xml-не, тоже полезный навык.
Аноним 14/07/23 Птн 23:24:44 2766489 484
>>2766487
>так, чтобы потоки друг с другом за файлы не дрались.
Алсо, еще и очереди не должны копиться. Т.к. обычно бизнес на обработку одного такого сообщения дает лимит времени. Обычно несколько минут максимум.
Аноним 14/07/23 Птн 23:29:58 2766498 485
>>2766487
>на реальной работе
Есть реальные люди, которые знают, как работают их процессы. Или у них можно спросить. Или можно подойти посмотреть.
Аноним 15/07/23 Суб 00:11:21 2766556 486
>>2766498
Если ты думаешь, что ситуация когда тебе дают задание написать какой-то модуль или сервис, ты начинаешь пытаться узнать у окружающих что и как работает в системе и получаешь от всех в ответ "а хуй его знает" - это что-то нереальное, то я тебя огорчу. Такое случается с завидной регулярностью.
Аноним 15/07/23 Суб 18:19:24 2767443 487
Подскажите, что почитать, чтобы лучше проэктировать классы их иерархию и т.д.?
Аноним 15/07/23 Суб 19:25:30 2767579 488
>>2767443
Почитай мать и отца своих.
Аноним 15/07/23 Суб 19:40:13 2767638 489
>>2762738
> Пилю десктопную программу
> Все правильно сделал?
Аноним 15/07/23 Суб 19:48:51 2767682 490
>>2767638
Ну и в чём он не прав?
Аноним 15/07/23 Суб 22:09:51 2767944 491
>>2767682
в том, что пришел с этим сюда
Аноним 15/07/23 Суб 23:26:40 2768057 492
Пацаны.
Почитал про новые фичи нового шарпа.
И меня чутка смущают новый синтаксис для конструкторов по умолчанию.
Ну, т.е. вот та ебала из котлина, когда:

class Zalupa(ILogger logger, IServiceA serviceA){}

Почему смущает. Потому что я уже привык, что я в конструкторе делаю валидацию параметров. Как ее тута делать - хуй знает. Второе - я так и не понял - для классов это так же как у рекордов будет публичными свойствами? А если мне нах это не уперлось?
Аноним 16/07/23 Вск 00:54:55 2768123 493
>>2768057
Так чё? Тебе запрещают юзать "старый" синтаксис?
Аноним 16/07/23 Вск 06:10:44 2768237 494
>>2768057
Похуй + похуй
Ты, наверное, небольшой стаж имеешь. Спустя время, если не будешь сидеть сиднем, будет безразлично, что там и как выражается.
Мне вот фшарп сейчас больше шарпа нравится. Все ругают джаву за многословность, и есть за что. Говорят, на шарпе код лаконичнее. Так вот, фп код ещё короче, чуть ли не в половину.

Единственное, что бесит – фшарп для Майкрософт язык второго эшелона, соответственно, нет горячей перезагрузки и встроенного форматирования кода в VS. Ну и ошибки компилятора порой нечитаемая залупа. А так – как глоток свежего воздуха
Аноним 16/07/23 Вск 12:12:33 2768400 495
>>2740238 (OP)
Аноны, подскажите. Учусь еще. Хочу прописать взаимодействие с .doc .docx файлами: открывать, редактировать, сохранять и т.д.
Нашел несколько путей решения, например, https://www.youtube.com/watch?v=vQ7uW6g0z-U
1)Вопрос возникает такой, если добавить Microsoft Word 16.0 Object Library через ссылки->COM, то необходим ли Microsoft Office Word на том компьютере, куда уже будет перенесена готовая программа для её работы? То есть заработает ли ГОТОВАЯ программа на том компьютере, где нет Ворда?
2)Нашел еще решение: загрузить через NuGet Microsoft.Office.Interop.Word. В этом случае нужен ли ворд для работы готовой программы на компьютере где нет ворда?
Аноним 16/07/23 Вск 12:16:38 2768408 496
Аноним 16/07/23 Вск 12:49:05 2768435 497
>>2768408
Ясно. Тогда OOXML попробую. Похоже все в docx придется переводить.
Аноним 16/07/23 Вск 12:50:11 2768437 498
2023-07-1612-43[...].jpg 195Кб, 1602x305
1602x305
Поясните, что этой залупе не нравится?
Аноним 16/07/23 Вск 13:11:39 2768455 499
>>2768437
Либа написана на netstandard2.1, а использую ее в net 7.
Может это из-за того, что в первой отсутствует ебатория с вопросиками? Но я впервые вижу чтобы в EventHandler sender был nullable. Или не обращал внимания
Аноним 16/07/23 Вск 13:57:01 2768489 500
>>2762623
>Смотрю после гречневой работы уроки C#. Мечтаю вкатиться. Нет каких-нибудь идей, как найти подработку на выходные в около айти, но чтобы капали какие-то реальные деньги, пусть хоть 20 рублей в час?
Ну нет так нет
>>2762624
>Как вкатиться на гречневую работу? Заебало айти. Вы то там в 9 пришли в 6 ушли и голова не о чем не болит, а мне с 8 до 8 сидеть, еще и на выходных выходить, если не успеваю.
https://2ch.hk/wrk/res/2625231.html#2730098
Тут глянь
Аноним 16/07/23 Вск 14:11:42 2768505 501
Как заставить студию копировать ресурсы только если они изменились? Вот у меня есть в ресурсах ffmpeg.exe, который весит под 150 мегабайт (а там есть еще ffplay.exe = 150Мб, ffprobe = 150Мб). Если я ставлю "всегда копировать" или "Копировать более позднюю версию", то при каждой сборке файл копируется, увеличивая время сборки.
Аноним 16/07/23 Вск 14:50:06 2768551 502
>>2768505
Сделай копирование своим скриптом и положи в пост-билд эвенты.
Аноним 16/07/23 Вск 16:16:29 2768670 503
>>2768057
> конструкторов по умолчанию
> я в конструкторе делаю валидацию параметров
Ничего не смущает?
Аноним 16/07/23 Вск 17:06:02 2768751 504
>>2766197
На реальных задачах.
Аноним 16/07/23 Вск 17:16:11 2768757 505
>>2767682
Пилить в 2023 дестктопную программу для картинок вместо использования профессионального софта - быть дауном. Бывают специфичные КЕЙСЫ, когда заказчик платит и ему похуй, но даже в таком случае стоит взять опенсорс проект, который легче всего экстендится.
Тратить время на это как на пет проект? Чтобы научиться круды шлёпать или орм юзать - так ты этому научишься в любом месте. Да даже если веб-приложуху делать - ты больше с технологиями познакомишься, как минимум нужна будет очередь юзеров на функционал для гостей.
Аноним 16/07/23 Вск 17:17:38 2768759 506
>>2768670
Про рич модели почитай. Тебя тоже перестанет смущать.
Аноним 16/07/23 Вск 19:01:55 2768970 507
>>2768057
ну никак не делать. А вообще вон в котлине там есть блок init{ }
а в шарпе - ну только не использовать этот новый синтаксис

>>2768759
это тут вообще никаким боком
Аноним 17/07/23 Пнд 20:24:20 2770464 508
перекот?
17/07/23 Пнд 20:31:49 2770474 509
>>2770464
Нет, иди нахуй со своим даунским перекатом, пока 1000 постов не будет.
Аноним 17/07/23 Пнд 20:34:05 2770476 510
>>2770474
Какие нахуй 1000 постов, сука? Тебе в ёбыч дать чтоле?
Аноним 18/07/23 Втр 00:39:26 2770714 511
image 23Кб, 445x775
445x775
>>2770464
это последний сишарп тред
Аноним 18/07/23 Втр 00:45:57 2770720 512
Аноним 18/07/23 Втр 08:06:38 2770838 513
564575475000.png 137Кб, 1920x1080
1920x1080
Пацаны, делаю д.з., пишу самый простенький калькулятор. Никуя не работает, выдаёт ошибку "Входная строка имела неверный формат.", ссылаясь на 16 строку кода. Даже сумму 5+5 не даёт. То есть, ввожу в консоле 5, потом +, потом 5, жму Enter и вылет с ошибкой. Что не так делаю, подскажите?
Аноним 18/07/23 Втр 10:23:21 2770936 514
>>2770838
В ридлайн пишутся только строки вроде, и надо преобразовывать в инт
Аноним 18/07/23 Втр 10:26:37 2770938 515
Аноним 18/07/23 Втр 17:32:20 2771810 516
>>2770938
>А я тупой сори
В смысле?
>надо преобразовывать в инт
Почему в инт? Я же калькулятор делаю. Дробные числа ведь тоже нужны. Более того, чел в видеоуроке делал калькуль с дабл, а не с инт и у него всё работало.
Аноним 18/07/23 Втр 18:06:36 2771854 517
>>2771810
Посмотри, что у тебя в 16 строке находится в Сonsole.ReadLine()
Я уверен что там или пустой стринг или что-то, что не получается распарсить. Попробуй использовать Double.TryParse:

var successParse = double.TryParse(Console.ReadLine(), out firstValue);
if (!successParse) Console.WriteLine("Input value is not a number.")
Аноним 18/07/23 Втр 18:34:39 2771881 518
>>2771854
>Посмотри, что у тебя в 16 строке находится в Сonsole.ReadLine()
Ну и что?
>Я уверен что там или пустой стринг или что-то, что не получается распарсить.
Не понимаю, что значит пустой стринг? Я число ввожу.
>Попробуй использовать Double.TryParse
Мне нужно сделать калькуль при условии использование "switch" или "if, else". Вот как этот чел делает.
https://www.youtube.com/watch?v=4aL0YVKt880&list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N&index=20

TryParse я еще не проходил как полагается.

>var successParse = double.TryParse(Console.ReadLine(), out firstValue);
>if (!successParse) Console.WriteLine("Input value is not a number.")
Попробовал так. Теперь после ввода второго числа, консоль не вылетает, но и сумму чисел не даёт.
Аноним 18/07/23 Втр 18:55:53 2771928 519
здарова синьоры, объясните вкатуну разницу между методом и функцией
Аноним 18/07/23 Втр 19:06:08 2771940 520
Аноним 18/07/23 Втр 19:41:54 2771981 521
>>2771881
при double.TryParse и вообще парсинге дабл не забывай про разделитеь - он может быть точкой, а может запятой. (хотя чем трахаться с региональными форматами - проще все в одну форму привести)

>>2771928
яйца же.
Аноним 18/07/23 Втр 21:51:04 2772129 522
.png 412Кб, 663x712
663x712
>>2771981
> яйца же.
Это которые курицу не учат?
Аноним 19/07/23 Срд 03:09:02 2772375 523
>>2772129
которые те же в профиль.
метод = функция объявленная в классе. Так что можешь называть хоть так хоть этак - всем плевать. А если кому не плевать - плюнь на него.
Аноним 19/07/23 Срд 04:04:29 2772384 524
>>2772375
Метод это функция cо скрытым параметром this.
Аноним 19/07/23 Срд 11:03:28 2772751 525
Аноны, подскажите по распознаванию звука на С#. Хочется прикрутить распознавания речи на русском и чтобы все это работало в офлайн режиме. Я так понял это можно реализовать только с Microsoft.Speech? Других вариантов нет? Я так понял на Microsoft.Speech надо прописывать свой словарь?
Аноним 19/07/23 Срд 12:44:22 2772909 526
0000234676.png 196Кб, 1920x1080
1920x1080
Анчоусы, это снова я. Пишу калькулятор. Нужно сделать так, что бы при выборе числа и вводе в консоль абракадабры вместо цифр программа не вылетала. Как это осуществить? Я так понимаю, что мне нужно в каждый case switch впихнуть блок try catch?
Аноним 19/07/23 Срд 12:55:41 2772928 527
>>2772909
Пиздец как ты заебал.
Аноним 19/07/23 Срд 13:20:44 2772982 528
>>2772928
Чем я тебя заебал, чучело? Я тебе на телефон названиваю что ли? Тред как раз для этого создан, чтоб общаться на тему кода в рамка С#.
Аноним 19/07/23 Срд 13:21:20 2772984 529
>>2772909
>в каждый case switch впихнуть блок try catch
Именно так, дерзай
Аноним 19/07/23 Срд 14:31:43 2773140 530
>>2772984
Написал, получилось. Всё работает как надо.
Аноним 19/07/23 Срд 14:43:56 2773149 531
>>2772384
скажи это статическому МЕТОДУ.
Аноним 19/07/23 Срд 14:50:01 2773158 532
>>2768505
Copy if never не работает?
Аноним 19/07/23 Срд 17:24:40 2773460 533
картофель-на-бе[...].jpg 48Кб, 800x547
800x547
Аноним 19/07/23 Срд 17:39:07 2773494 534
ut-00007278.jpg 102Кб, 1200x1200
1200x1200
>>2773460
ничё, всё.
наскальная живопись ёбаная а не язык
Аноним 19/07/23 Срд 18:17:38 2773585 535
>>2773149
Это уже не класс, а неймспейс. Простая функция, а не метод.
Аноним 19/07/23 Срд 18:42:34 2773645 536
>>2773585
все проще. это ты уже сам придумал.
решил натянуть сову.
Аноним 19/07/23 Срд 20:52:24 2773831 537
Гайз, есть ли где нормальные гайды по переносу C# приложений из Windows в Linux? Это вообще возможно сделать если приложение использует сторонние библиотеки?
Аноним 19/07/23 Срд 20:56:44 2773835 538
>>2773831
Лишь бы эти сторонние библиотеки не были прибиты гвоздями к винде.
Аноним 19/07/23 Срд 21:01:20 2773839 539
>>2773835
Да уж. Что-то захотелось просто через wine попробовать запустить.
Аноним 19/07/23 Срд 22:38:05 2773925 540
>>2773831
Сначала апгрейдишь все до .NET6.
Потом переводишь на линукс.
Все гайды есть на мсдн.
Аноним 19/07/23 Срд 22:42:36 2773941 541
>>2772909
>что мне нужно в каждый case switch впихнуть блок try catch?
Каждый double.Parse в try/catch оборачивай.
Злая подъебка
Аноним 19/07/23 Срд 23:02:30 2773989 542
>>2773941
>>2772909
Зачем вы оверинжинерите? Есть же идеально подходящий сюда TryParse который позволит не тянуть здоровую портянку
Аноним 19/07/23 Срд 23:04:43 2773990 543
>>2773925
Апгрейдишь проект с винформами до .NET6. Успех.
Переводишь на линупс... Так, gадажжи ёбана.
Аноним 19/07/23 Срд 23:40:43 2774028 544
image.png 1247Кб, 1266x1066
1266x1066
>>2773989
Чувачок, это сарказм был если чо.
Он даже базовых if while и прочего нормально не знает скорее всего. На данном этапе абсолютно похуй как и что он делать будет, даже если он хоть каждую строчку в try-catch обернет. Потом уже когда научится нормально и соображалка будет работать, то если не дурак то поймет как надо.
Аноним 19/07/23 Срд 23:42:07 2774031 545
>>2774028
Десктоп приложения и на винде-то с каждым днем все меньше и меньше нужны, нахуя их еще и на линукс тащить?
Аноним 19/07/23 Срд 23:45:38 2774038 546
Аноним 20/07/23 Чтв 01:22:03 2774129 547
Аноним 20/07/23 Чтв 04:46:46 2774199 548
>>2774129
В свойствах файла
"Действия при сборке", кажется – как на русском, не помню
Аноним 20/07/23 Чтв 11:00:33 2774421 549
изображение.png 1048Кб, 960x720
960x720
Ну и еблище у неё
Аноним 20/07/23 Чтв 11:16:12 2774449 550
Аноним 20/07/23 Чтв 12:09:54 2774563 551
>>2774421
А с каким лицом читают книги по фреймворкам? Ладно там читать про параллелизм/архитектуру/паттерны/алгоритмы – про первичную базу. А читать про что-то вторичное – ну хз
Аноним 20/07/23 Чтв 12:55:38 2774621 552
image.png 130Кб, 648x802
648x802
>>2772909
На, мужик, тебе изоленту.
Я в курсе, что ты этого нихуя не проходил, но это тебе пример, того что ты должен понимать и уметь делать на уровне джуна. И это тоже далеко не самый лучший код.
Аноним 20/07/23 Чтв 13:31:36 2774679 553
2023-07-2013-25[...].png 32Кб, 684x458
684x458
Кто нибудь работал с FFmpeg. Допустим мне надо конкатенировать 10 аудиофайлов в один, и чтобы между ними были пробелы. Так вот и я видел примеры на SO, что все операции для N файлов пытаются запихнуть в одну команду.

Всвязи с чем вопрос, а почему делается так? Почему не делают цикл, где отправляются простейшие команды?
Аноним 20/07/23 Чтв 14:22:25 2774746 554
>>2773149
>Метод это функция cо скрытым параметром this.
>скажи это статическому МЕТОДУ.
Что не так? Рефлексию видел? Единственное отличие вызова статического метода против нестатического - это передача null в качестве инстанса, то есть в случае статики this == null, всё.
Аноним 20/07/23 Чтв 14:57:07 2774820 555
>>2774679
потому что за 1 проход быстрее, чем несколько последовательных вызовов программы, которая на каждый вызов должна читать файл, декодить и начинать работу заново.
Аноним 20/07/23 Чтв 14:58:41 2774825 556
>>2774746
>вызова статического метода против нестатического
ты эти вопросы адресуй анону, что стат метод функцией назвал, а класс со стат методом неймспейсом для этой функции нарек.
Аноним 20/07/23 Чтв 15:45:34 2774905 557
>>2773941
>>2773989
>>2774621
Я действительно в каждый case свитча запихнул по блоку try/catch, затем отшлифовал некоторые места и работает всё как планировалось изначально. Все четыре основные мат. операции, калькуль не крашится при вводе чего-то не того, а отбрасывает в начало, стирая результаты предыдущей операции и работает до тех пор, пока я не закрою консоль. Да, код выглядит громоздко, но работает.
Аноним 20/07/23 Чтв 17:38:31 2775096 558
>>2774905
Ну покажи конечный код
И мы устрашимся
Аноним 20/07/23 Чтв 19:45:00 2775293 559
2023-07-2019-44[...].png 6Кб, 286x126
286x126
В чем смысл данной конструкции?
Аноним 20/07/23 Чтв 19:56:40 2775304 560
>>2775293
string Name { get { return this.Argument; } }
Аноним 20/07/23 Чтв 20:16:07 2775332 561
>>2775096
>Ну покажи конечный код
А как это сделать?
Аноним 20/07/23 Чтв 20:33:48 2775365 562
>>2775332
да хоть на пастебин положи. вряд ли у тебя там более одной портянки
Аноним 21/07/23 Птн 10:59:56 2775895 563
>>2775293
Возможно прокси для какой-нибудь легаси-хуйни. Может в источнике под капотом там какие-нибудь разные свойства были, а по новой бизнес логике должно отдаваться одно и то же но с сохранением старого API.
Аноним 21/07/23 Птн 14:43:08 2776231 564
изображение.png 36Кб, 527x165
527x165
Почему?
Аноним 21/07/23 Птн 16:32:54 2776368 565
Аноним 21/07/23 Птн 19:43:38 2776735 566
Почему этот язык такой приятный?
Сложно ли будет найти РАБоту ( готов работать на галлере ) если потрачу время и силы на этот язык?
Аноним 21/07/23 Птн 20:19:27 2776768 567
>>2776735
> Почему этот язык такой приятный?
Сахар.
> Сложно ли будет найти РАБоту ( готов работать на галлере ) если потрачу время и силы на этот язык?
Несложно.
Аноним 21/07/23 Птн 20:22:14 2776776 568
>>2776768
>Сахар
синтаксический сахар? syntax sugar?
Аноним 21/07/23 Птн 20:30:33 2776783 569
563464756745634[...].jpg 27Кб, 604x341
604x341
Пацаны, нужна ваша помощь. Я никуя не понимаю.
Делаю программку по этому видеоуроку https://www.youtube.com/watch?v=bJ4DtsojdrI&list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N&index=23[РАСКРЫТЬ]
Нужно сделать так, чтобы после ввода чисел в консоль был совершен подсчёт чётных и нечётных чисел в заданном диапазоне чисел (например от 0 до 100), а затем найдена сумма чётных и сумма нечётных чисел в этом самом заданном диапазоне. Надеюсь объяснил понятно.

Так вот вопросы. Как происходит подсчёт суммы чётных и подсчёт суммы нечётных чисел? Чел в видео вводит в консоль цифру 5.
Итог.
Сумма нечётных: 9
Сумма чётных: 6
Что блядь? Откуда такие цифры?

И еще вопрос. Зачем ему нужно инкрементировать значение переменных отвечающих за чётные и нечётные числа? Он вроде объяснил, но я ничего не понял.

Помогите пжлст. С меня как всегда.
Аноним 21/07/23 Птн 20:33:53 2776787 570
>>2776776
Да. Шарп приятный, потому что сладенький из-за обилия синтаксического сахара. Остерегайся сахарного диабета.
Аноним 21/07/23 Птн 21:01:21 2776821 571
>>2776783
5 -> 1, 2, 3, 4 5 -> (1, 3, 5), (2, 4) -> 9, 6
Аноним 21/07/23 Птн 21:12:22 2776838 572
>>2776783
Анончик, ты чево...

СУММА нечетных от 1 до 5
1,3,5 = 9
Аноним 21/07/23 Птн 21:17:58 2776853 573
>>2776735
Потому что его проектировали профессиональные инженеры высшей квалификации, а не опенсорная шушера.
Аноним 21/07/23 Птн 22:14:43 2776911 574
>>2776821
>>2776838
А всё. Теперь понял. Благодарю.

P.S.
По-моему задание должно было звучать так: найдите сумму значений чётных/нечётных чисел.
Аноним 22/07/23 Суб 09:50:47 2777232 575
.jpg 158Кб, 1365x2048
1365x2048
Шарпогоспода, вы же шарите за таски и все что с ними связано.

Собственно вопрос возник.
Что будет эффективнее в плане минимизации использования ресурсов и скорости работы.

Кейс. TCP-сервер, с кастомным протоколом и какой-то логикой связанной с работой с базой.
Допустим простейший кейс - TCP-сервер, у которого только один тип сообщений - зарегистрироваться на сервере, после регистрации - бродкастинг сообщений другим подключениям. АКА чатик с регистрацией.

Собственно два подхода вижу я:
1. Все на откуп планировщика. Алгоритм простой: подключились, сервер спарсил сообщение, зарегистрировал клиента, и давай рассылать всем подряд.
2. Событийная модель на базе эвентов. После подключения, в цикле проверяем, есть ли какие-то эвенты для обработки этого конкретного подключения. Используем либо тредпул, либо ручками настраиваем число тредов для обработки всего этого дела.

Собственно, я делал первым способом в свое время. И какие обосрамсы я увидел.
1. Я не могу нормально контролировать размер памяти что используется приложением, потому что надо каждому соединению выделять свой буффер, чтобы не страдать.
2. Из-за конкурентности и того что я использовал NetworkStream - надо каждому соединению синхронизировать доступ при бродкасте, это тоже боль, ну да ладно.
3. Если клиентов много (10к и более) и они разом подключаются - пиздец, сразу 100% ЦПУ задействовано, сразу резкий скачек с потреблением памяти, а потом - GC начинает ебать так, что мама не горюй.
4. Если клиентов много (10к и более) и они разом отключатся - пиздец еще больший чем при подключении. Особенно если клиенты неправильно отключались(просто отключились не послав FIN пакет и сокет закрыла ОС). Эксепшин погоняет эксепшином, их начинает GC собирать и ты сидишь, смотришь на это, попивая чай, пока блин все отключатся, чтобы можно было дальше работать.

Второй пример - я видел в коде MINA и Netty, когда изучал. Я пробовал на жаве написать c Mina. И типа работало-то оно быстрее. Но хуй знает почему - просто непомерно много жрало памяти. Я правда не уверен - это проблема жавы или подхода такого. Просто блин. Сам подход выглядит более экономным. Но 10к соединений - 10 гигов сожрали, я чет с этого опешил и решил что не надо так делать.
Ну и второе повторять не хочется, потому что там уже вся эта вуду-магия с визитерами, пайплайнами и прочим, что мне не особо интересно.

Собственно. Че посоветуете-то?
Аноним 22/07/23 Суб 09:55:31 2777234 576
1. А в чем отличие строки вида
$" число: {number}"
от строки
string.Format("число: {0}", number)
?

2. В чем отличие
" \"какой-то текст\" "
от строки
@" ""какой-то текст"" "
?

3. Есть ли смысл использовать
string.Format("число: {0}", number)
вместо
"число: " + number.ToString()
Аноним 22/07/23 Суб 09:58:34 2777238 577
>>2777234
При интерполяции - ты отдаешь на откуп компилятору все.
Обычно он просто приведет твою строку к string.Format("abc {0} def {1}", foo, bar)
Аноним 22/07/23 Суб 10:09:22 2777247 578
Аноним 22/07/23 Суб 12:49:55 2777401 579
>>2777232
ну вот потом и расскажешь что получилось.
Аноним 22/07/23 Суб 14:39:40 2777550 580
>>2777234
>1
Второй способ удобнее когда тебе нужно в строку вставить несколько копий одного и того же параметра, например
string.Format("число: {0} и еще раз {0} ну и еще раз {0}", number)
>2
Отличие в том, что во втором случае компилятор за тебя сам потом отэскейпит последовательности.
Аноним 22/07/23 Суб 17:19:29 2777755 581
>>2777234
1 в боксинге отличие. в первом случае компилятор и шарп 10 позаботятся чтобы его не было. Ну и тупо читабельнее в 1 случае, если он возможен

3 первый вариант читабельнее, в остальном пока разницы нет.
Аноним 22/07/23 Суб 21:56:27 2778037 582
>>2777755
>1 в боксинге отличие.
1. Тащемта боксинга можно избежать просто передавая параметры через .ToString(), например:
string.Format("число: {0}", number.ToString())
2. Сам парсинг в String.Format сожрет намного больше времени чем боксинг, так что не особо стоит заморочек.
Аноним 23/07/23 Вск 11:09:14 2778328 583
У меня есть класс, который перед использованием нужно инициализировать. Так вот, какое исключение кидать, если пользователь попытается вызвать метод до инициализации?
Аноним 23/07/23 Вск 11:18:47 2778331 584
>>2778328
Свое навасянь и его кидай.
Аноним 23/07/23 Вск 15:46:49 2778556 585
>>2778328
Тоже интересует данный момент.

В большинстве случаев я пытаюсь этого избегать, ибо придется в каждом методе проверять инициализацию. Если посмотришь в классы, где есть инициализация (типа контролы всякие), то там есть флаг IsInitialized.

И это надо в каждом методе
if(!IsInitialized) throw new Exception("ClassName is not initialized");
Но это же сумасшествие.
Аноним 23/07/23 Вск 16:16:02 2778598 586
>>2778556
Это пулинг, чел. Рациональная работа с памятью. За это приходится платить приседаниями.
Аноним 23/07/23 Вск 16:27:44 2778613 587
>>2778328
Как по мне, если твой класс спроектирован так, что он требует перед началом его использования вызов метода инициализации, то он спроектирован хуево и дурно пахнет. Либо полностью инициализируешь его как положено в конструкторе, либо, если по каким-то причинам это сделать не выходит (самый банальный пример - операция инициализации должна выполняться асинхронно), то запрещаешь пользователю дергать конструктор (internal можешь его сделать) и пишешь фабрику для объекта данного класса, инициализируешь объект как положено внутри методов фабрики и отдаешь пользователю в уже готовом к использованию виде.
А на счёт исключения. Как по мне, для такой ситуации вполне подойдёт InvalidOperationException.
Аноним 23/07/23 Вск 16:49:24 2778629 588
>>2778328
>>2778556
Тоже интересовал этот вопрос, тоже сначала делал так

И потом пришел к этому
>>2778613

Иногда лейзи инициализацию делаю
Аноним 23/07/23 Вск 17:45:46 2778671 589
>>2778613
Я бы сделал как ты пишешь, но тогда будут проблемы с di.
Аноним 23/07/23 Вск 17:57:22 2778679 590
>>2778671
Инжектишь экземпляр фабрики вместо экземпляра целевого класса. Потом, в том месте где необходимо, с помощью фабрики создаёшь нужный тебе объект. С DI тут вообще проблем нет. Единственное, если твой объект через параметры конструктора из DI зависимости получает, то переносишь их в параметры конструктора фабрики, а потом прокидываешь в конструктор объекта при его создании.
Аноним 23/07/23 Вск 18:23:16 2778705 591
>>2778556
Можешь хелпер написать и в каждом методе просто дёргать ThrowIfNotInitialize()
Аноним 23/07/23 Вск 19:16:22 2778756 592
.jpg 945Кб, 874x1240
874x1240
Пацаны.
Планирую вкатиться джуном.
Решил вот так сказать закрепить свои знания о том что изучил за последний год. В качестве пет-проекта типа тамагочи решил сделать.

В общем. Оцените код и дайте советов мудрых!
https://pastebin.com/tvFPjyaH
Аноним 23/07/23 Вск 19:30:17 2778762 593
>>2778328
Не делай классы, которые надо инициализировать перед применением. Это максимально пидорское проектирование и ебал я в сраку таких вот составителей апи.

Вся инициализация целевого класса должна происходить в конструкторе. Если это публичное апи. В своем - че хочешь делай и че хочешь кидай. Но наружу такое просачиваться не должно, если ты не пидорас конечно.
Аноним 24/07/23 Пнд 02:09:56 2779106 594
>>2778328
InvalidOperationException
Не слушай «архитекторов», если удобно - делай как хочешь. Ну и книжку по DDD ебани.
Аноним 24/07/23 Пнд 09:37:44 2779201 595
>>2778756
>Оцените код
В нынешних реалиях на джуна - нет. На стажера может быть (только за стажировку платить будешь ты)
>дайте советов мудрых!
Сорян, но там такие базовые ошибки, что даже объяснять лень.
Аноним 24/07/23 Пнд 11:15:31 2779274 596
изображение.png 18Кб, 785x143
785x143
Ого, а думал, что в обобщениях вообще любая мат логика не работает, а тут, оказывается, можно написать обобщенный метод, который вычислит какое значение больше
Аноним 24/07/23 Пнд 11:46:34 2779306 597
Аноним 24/07/23 Пнд 11:58:36 2779320 598
>>2779306
Ну это относительно недавно ввели, если я правильно понял. Ну а так вообще заебись, можно говнокодить всякие прикольные штуки с обобщениями
Аноним 24/07/23 Пнд 17:52:49 2779934 599
Шарпачи, прошу помощи, тут нашел удобную программу сортировалку картинок, но решил дописать немного функционал под себя, не могу выставить для одного объекта значение.

Сократил, немного, думаю смысл не потерялся.
Посмотрите?
https://pastebin.com/ajdw7cTb
Аноним 24/07/23 Пнд 18:02:43 2779962 600
>>2779934
А, усё. Справился, хуйню понаписал.
Аноним 24/07/23 Пнд 18:03:21 2779964 601
>>2779934
Разве не через ГетСеттер и Инвоук нужно?
Аноним 24/07/23 Пнд 18:29:53 2780023 602
>>2779964
Заметил что они там get делают так:
string tmp = (string)Prop.GetValue(settings, null );
https://github.com/yfdyh000/PhotoSift/blob/master/PhotoSift/frmMain_Input.cs#L841

Поэтому и set я додумал будет так:
Prop.SetValue(settings, new_name);

А settings у них определен так:
private static AppSettings settings;

> ГетСеттер и Инвоук
Не знаю насколько это правильно, на шарпе я, честно, второй день работаю
Аноним 25/07/23 Втр 09:03:17 2780440 603
>>2779934
вот кстати не пиши в таком стиле. это ж портяночный бардак. хотя бы минимальное MVP раз уж это винформсы.
Аноним 25/07/23 Втр 12:39:45 2780645 604
>>2758756
Синтаксически лаконичнее (по крайней мере был), есть сборщик мусора - не надо следить за памятью, ябучие хэдеры не нужны, всякие полезные структуры данных из коробки
Аноним 25/07/23 Втр 13:04:14 2780686 605
В шарпе есть default properties? Поисковик выводит только default value property, а метаните ничего не упоминается.

Короче суть такова. В бейсике есть свойства по умолчанию, которые автоматически вызываются при обращении к экземпляру. К примеру в классе List дефолтным свойством является Item, поэтому я могу выполнить подобную конструкцию
myList(0) = 999 что эквивалентно myList.Item(0) = 999
в шарпе почему-то это делается расширением
myList.ElementAt(0) = 999;
И что сломало мой мозг в шарпе, так это вот это
myList[0] = 999;
Почему скобки квадратные?
Аноним 25/07/23 Втр 13:06:41 2780690 606
>>2762554
шоб у тебя видеокарта на таком драйвере работала
Аноним 25/07/23 Втр 13:41:13 2780751 607
>>2780686
они везде квадратные в популярных языках- можешь пройтись по топу языков и удивиться
Это у вас они почему то круглые.
Аноним 25/07/23 Втр 13:42:44 2780754 608
>>2780686
Опять ты свой заебавший бейсик тянешь?
В куче ныне живых языков обращение к элементу массива/индексатору идёт через [ ].

Может отпустишь воняющее писюнами прошлое?
Аноним 25/07/23 Втр 16:13:49 2780976 609
>>2780440
Да есть такое, как-то по-китайски написано, много и ненужно. Но что ж поделать, проект уже готовый.
Рефакторить не хочется, этого и на работе хватает.

Так просто пару фиксов добавить для удобства надо, может даже пул реквест на них запилю, лол.
Аноним 25/07/23 Втр 16:56:54 2781048 610
>>2780686
> В бейсике

Ты как из криокамеры сбежал? Когда тебя заморозили? 9/11 при тебе было или уже после?
Аноним 25/07/23 Втр 20:00:52 2781379 611
>>2780751
>Это у вас они почему то круглые.
Потому свойства в бейсике это по сути метод, а метод может иметь кучу параметров. Грубо говоря я могу и вот такое провернуть
myCustomList("itemName", isChecked:=true)
Тут прослеживается логика, а ты мне про "так заведено" — очень странно.

>>2781048
Забавно, что при отсутствии схожего функционала я в ответ получил только высокомерные оскорбления. Вообще со свойствами в шарпе полная задница. B cамое глупое в этйо ситуации то, что я не могу передать свойство в качестве параметра потому что свойство это метод, но при этом метод не поддерживает множество параметров. Зато обезьяньи квадратные скобочки — ага. Каргокульт бессмысленный и беспощадный, и высокомерие.
Аноним 25/07/23 Втр 22:57:38 2781568 612
>>2781379
а причем тут свойства если мы говорим про индексатор
и да, он тоже может иметь кучу параметров.

и для индексатора используются именно []
для свойств же кто на что горазд.
Аноним 25/07/23 Втр 23:05:31 2781574 613
>>2781379
>>2781379
>Зато обезьяньи квадратные скобочки —
Ты, блять, не поверишь, но 'квадратные скобочки' - это по сути тоже метод. Гугли, что такое индексатор в шарпе.
И таких индексаторов к своему классу ты можешь прикрутить сколько угодно, с любым функционалом.
выпидорасы выпидорасы 26/07/23 Срд 02:44:36 2781675 614
выпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасы
Аноним 26/07/23 Срд 03:08:12 2781678 615
>>2781675
Да. Извиняться не будем
Аноним 26/07/23 Срд 12:56:17 2782086 616
>>2781568
>>2781574
А, вот оно чё. Я думал индексатор может только принимать числа и один параметр. Вот эта штука мне и нужна была.

Если что, этот шиз >>2781675 не я, а то еще подумаете.
Аноним 26/07/23 Срд 17:16:22 2782461 617
image.png 160Кб, 1188x700
1188x700
>>2782086
Алсо не забывай еще, что индексаторы можно перегружать.
Вот на пике простой пример.
Аноним 26/07/23 Срд 20:05:21 2782828 618
>>2781379
И тем не менее - тебя когда заморозили? И как ты сбежал?
Аноним 26/07/23 Срд 20:23:02 2782848 619
шарпаны, есть запечатанный класс с пачкой проперти, хочу прицепить к ним INPC. сам класс нельзя изменять (он из стороннего длл).
планирую врезаться в сеттеры рефлексией, подводные камни?
Аноним 26/07/23 Срд 20:58:03 2782896 620
>>2782848
Делай декоратор и не выебывайся.
С рефлексией ты на пустом месте теряешь от 10 до 100 раз в производительности.
Дополнительно - рефлексия это как ЭссКуЭль: пока пишьеш - просто понятно, когда через два дня посмотришь на это - будешь думать, что за долбоеб писал и что оно вообще делает.
Ну и для твоей задачи - вообще хуй пойми зачем это.
Аноним 26/07/23 Срд 21:00:45 2782899 621
>>2782848
Можешь кстати не декоратор сделать, а адаптер обычный.

Ну и да INPC - хуйня из под коня. Делай нормально тогда через реактивные события и автоматическую отписку.
Аноним 26/07/23 Срд 21:01:50 2782905 622
>>2778756
Что бросается в глаза:
- Вместо абстрактного класса с одним абстрактным методом в шарпах используют интерфейсы.
- goto в бизнес логике использовать грешно, переписывай без него.
Аноним 26/07/23 Срд 21:59:07 2782999 623
>>2782896
>>2782899
все вызовы этих пропертей тоже в сторонних длл сидят...
Аноним 26/07/23 Срд 22:17:15 2783022 624
>>2782999
А. Чеж сразу не сказал. Ну, тогда да. Тебе только рефлексией и извращаться. Ну, еще ансейфа навалить придется и немного с илом поиграться.
Правда я не уверен все еще что стоит оно того и ты знаешь что делаешь.
Аноним 26/07/23 Срд 22:28:05 2783034 625
>>2782896
>Дополнительно - рефлексия это как ЭссКуЭль: пока пишьеш - просто понятно, когда через два дня посмотришь на это - будешь думать, что за долбоеб писал и что оно вообще делает.
Этот шарит. И за sql и за рефлексию.
Аноним 26/07/23 Срд 22:55:15 2783067 626
>>2783034
Чел. Я не знаю ты пытаешься рофлить или нет, но первые 3 года я работал администратором СУБД, лол. Писал хранимки, писал хуйню для SSRS, делал дохуя изъебистые выборки, оптимизировал то что работало медленно и прочей чепухой занимался.
И вот знаешь. Мое мнение - именно такое. Скуль - охуенно пока ты в контексте. Написать и забыть - охуенно. А вот если у тебя через месяц попросят модифицировать то что ты там написал - тебе проще нахуй выбросить все и написать с нуля, чем пытаться вспомнить. Блин. Да простейший пример- найти все дырки в таблице(т.е. есть в таблице последовательность значений, допустим целые числа от 0 до максимального в таблице, надо среди нее - все пропущенные значения выбрать). Делается в 4 строчки. Но сейчас я даже не вспомню как оно делается-то и уверен что даже те кто каждый день пишут SQL-запросы ручками - с ходу не напишут такой запрос без гугления.
Аноним 26/07/23 Срд 23:19:37 2783091 627
>>2783022
в том то и шутка, что угодно будет лучше, хоть черная магия.
там сейчас опрос всех пропертей ахуилион раз в секунду.
Аноним 26/07/23 Срд 23:41:13 2783128 628
>>2782848
Ну смотри. Если нет INPC то Wpf подписывается с помощью PropertyDescriptor.AddValueChanged

Это может вызвать утечку памяти, но в общем то это готовый велосипед
Аноним 27/07/23 Чтв 02:18:57 2783301 629
>>2783067
Никаких рофлов. Полностью с тобой согласен. Еще в эту же копилку - регулярки. Их обычно уже через неделю бессмысленно разбирать и проще сразу в конструкторе собирать.
Аноним 27/07/23 Чтв 09:56:46 2783459 630
изображение.png 39Кб, 606x143
606x143
Платиновый неофитовый вопрос на счет зависимостей:
Есть главный проект (1), LoggerService библиотека (2), Contract библиотека (3). Между ними зависимости 1->2->3.
Вопрос, должен ли я видеть в первом проекте референсы третьего проекта? Пример, во втором проекте используется либа NLog, но в первый проект его не видит. В туториалах пишут пикрил, хотя я по прежнему ничего не вижу даже после этих действий. И еще пример, в третьем проекте у меня есть интерфейс который используется во втором. В первом проекте у меня используется класс со второго проекта в котором есть поле типа интерфейса с третьего проекта, но если я хочу его использовать в первом проекте - он не находит тип интерфейса.
Пока что я тупо в зависимостях на указывал ссылки на все дллки всех проектов, это норма?
Аноним 27/07/23 Чтв 11:13:53 2783551 631
image 0Кб, 138x26
138x26
>>2783459
кувалдировать пальцы которыми ты это дерьмо строчил
Аноним 27/07/23 Чтв 11:25:56 2783562 632
>>2783551
Что сказать то хотел?
Аноним 27/07/23 Чтв 11:32:37 2783570 633
Аноним 27/07/23 Чтв 12:15:16 2783633 634
изображение.png 42Кб, 522x449
522x449
изображение.png 67Кб, 849x634
849x634
Почему верхний класс выдаёт ошибку? Скопировал код из книги и решил так сказать переписать в развёрнутый конструктор. В итоге нихуя не работает. Сама ошибка: ОшибкаCS8862Конструктор, объявленный в записи со списком параметров, должен иметь инициализатор конструктора "this".
Аноним 27/07/23 Чтв 12:18:04 2783642 635
изображение.png 48Кб, 437x531
437x531
>>2783633
Вообще нихуя не понимаю. Сверху написал ручками, а снизу код, который скопировал поправил немного
Аноним 27/07/23 Чтв 12:26:46 2783655 636
изображение.png 50Кб, 338x589
338x589
>>2783633
>>2783642
Я хуй знает, но походу ошибка была из-за отсутствия статического Main
Аноним 27/07/23 Чтв 12:56:33 2783713 637
изображение.png 86Кб, 663x816
663x816
>>2783633
А нет, ошибка опять всплыла
Аноним 27/07/23 Чтв 12:57:44 2783716 638
>>2783713
нахуя тебе этот record используй class
Аноним 27/07/23 Чтв 13:01:46 2783726 639
>>2783716
Да я примеры из книги рассматриваю и вот чё-то вылезает эта ошибка
Аноним 27/07/23 Чтв 13:18:42 2783784 640
изображение.png 14Кб, 777x71
777x71
Слушайте, а это нормально с точки зрения читаемости кода?
Аноним 27/07/23 Чтв 13:38:19 2783847 641
>>2783633
Потому что ты объявил так называемый primary constructor вот этой строкой: record Point(), () <-- primary constructor
Если он объявлен, в любых других конструкторах ты обязан его вызвать с помощью : this()
Аноним 27/07/23 Чтв 13:40:30 2783854 642
image 5Кб, 395x63
395x63
>>2783784
Нормально, но можно лучше написать
Аноним 27/07/23 Чтв 14:36:59 2783942 643
>>2783847
ААААА, всё, допёр. А я даже не заметил. Спасибо
Аноним 27/07/23 Чтв 16:07:47 2784109 644
Пишу архитектурный тест на зависимость.
Нужно проверить, что определенный тип от интерфейсы не создается/инъектится в неймспейс.
Как это сделать?
Аноним 27/07/23 Чтв 16:14:28 2784121 645
>>2784109
Почему этот интерфейс тогда доступен в сборке? Звучит костыльно
Аноним 27/07/23 Чтв 16:18:47 2784133 646
Если нужно проверить конкретный неймспейс, то тебе придется пройтись по всем сборкам, из-за того что неймспейс можно писать где-угодно. В любом случае это несколько строчек рефлексии с линкю
Аноним 27/07/23 Чтв 16:22:48 2784143 647
>>2784121
Смысл в том, чтобы человек потом вместо прямого вызова хэндлера использовал медиатр.
Не вижу тут ничего костыльного.
Аноним 27/07/23 Чтв 16:28:35 2784154 648
>>2784143
ты не напишешь тест на хуйню аля
void ObrabotatZalupu()
{
var handlerZalupy = new HandlerZalupy();
}

ебаш DiagnosticAnalyzer который будет кидать репорт если найдёт использование типа
Аноним 27/07/23 Чтв 16:32:05 2784160 649
к слову, если я правильно помню, IRequestHandler<> не регается в di, медиатр создаёт инстанс через активатор, так что если речь только про иньекцию, то проблемы нет
но может я неправильно помню
Аноним 27/07/23 Чтв 16:42:29 2784170 650
>>2784154
Спасибо. Тоже думал насчет трассировки.
А проверить импортированные типы вообще нельзя?
Аноним 27/07/23 Чтв 16:45:40 2784175 651
Аноним 27/07/23 Чтв 16:49:02 2784178 652
Будет ли говнокодом добавление в класс метода AsInterface(), который приводит класс к интерфейсу, реализованному этим классом?
Аноним 27/07/23 Чтв 16:51:24 2784182 653
>>2784178
Нет. Обычно экстеншн методы для этого пишутся
Аноним 27/07/23 Чтв 16:56:08 2784192 654
>>2784178
А если класс реализует насколько интерфейсов?
Аноним 27/07/23 Чтв 17:51:13 2784296 655
как перестать писать лапшу и начать жить?
Аноним 27/07/23 Чтв 18:09:29 2784325 656
>>2782461
Ага, я уже почитал. Тоже круто.
Аноним 27/07/23 Чтв 18:27:37 2784353 657
Пацаны, тут как-то упоминали не городить велосипеды с ICommand и, мол, есть готовые решения.

Что меня смущает в командах? Во-первых передача данных команде очень неудобна и порой невозможна.
Нельзя биндить данные к параметру Execute, который сам по себе неудобен тем, что он object.

Часто команду сложно сделать универсальной и проще переписать под нужную вьюмодель. Но тут вероятно моя беда. Все свелось к тому, что я в команду добавил INPC и добавляю множество параметров через биндинг свойств.

Но все же хотелось бы посмотреть другие реализации для общего ознакомления.
Аноним 27/07/23 Чтв 19:00:59 2784408 658
>>2784353
> Нельзя биндить данные к параметру Execute, который сам по себе неудобен тем, что он object.
Про commandparameter не слышал?
Аноним 27/07/23 Чтв 19:43:30 2784480 659
>>2784408
>commandparameter
он не позволяет биндить, это параметр метода Execute().
Аноним 27/07/23 Чтв 22:49:22 2784752 660
>>2784353
>Нельзя биндить данные к параметру Execute
а надо?
никогда не нужно
у тебя есть вьюмодель - она содержит стейт. у меня все
Аноним 28/07/23 Птн 08:27:29 2784953 661
>>2783551
Короче я разобрался, я дебил - подключал сбилдженные дллки к мейн проекту, а надо было добавить проект к решению и затем добавить к мейн проекту ссылку на общий проект, тогда подтягиваются референсы с дочернего проекта.

Кстати вопрос, что сейчас вместо Microsoft.AspNetCore.Mvc? Он помечен как deprecated, но я чето пока не могу найти замены.
Аноним 28/07/23 Птн 12:34:03 2785269 662
>>2784953
<Project Sdk="Microsoft.NET.Sdk.Web">
Аноним 28/07/23 Птн 15:37:05 2785612 663
>>2784953
либо сдк как выше чел написал, либо FrameworkReference
Аноним 28/07/23 Птн 17:33:46 2785814 664
547446456.jpg 109Кб, 735x490
735x490
Шарписты, объясните мне пжлст, как работать с отладчиком в вижуал студио?
Аноним 28/07/23 Птн 17:39:14 2785831 665
>>2785814
Всм? Берёшь и работаешь как и с подавляющим большинством дебаггеров в идешках.
Ничего необычного и странного нет в шарповом дебаге
Аноним 28/07/23 Птн 17:42:52 2785838 666
>>2785814
с периодическим возгоранием пониже спины.
Аноним 28/07/23 Птн 17:52:51 2785851 667
>>2785814
может тебе ещё рассказать куда код писать?
Аноним 28/07/23 Птн 17:55:51 2785858 668
>>2785851
>код писать
Нет, я просто хочу 4к$ получать, без этой вот хуйни
Аноним 28/07/23 Птн 17:58:45 2785866 669
>>2785858
А получишь только хуй.
Аноним 28/07/23 Птн 17:59:53 2785871 670
>>2785838
От экзепшенов высчитывания значений и залипаний?
Аноним 28/07/23 Птн 18:10:49 2785898 671
Аноним 28/07/23 Птн 18:22:41 2785911 672
Аноним 28/07/23 Птн 18:24:02 2785914 673
>>2785898
Выглядит как решарпер под соусом другого цвета
Аноним 28/07/23 Птн 18:25:19 2785920 674
>>2785898
ух ты, выглядит прикольно
Аноним 28/07/23 Птн 18:29:13 2785928 675
>>2785920
только не работает в 22 студии нормально. В итоге при переходе на 22 студию пришлось отказаться и стало печально.

>>2785914
решарпер вообще тут никаким боком. даже рядом не валялся.
Аноним 28/07/23 Птн 18:31:06 2785930 676
>>2785928
ну у них на сайте сказано что их купил датадог, так что в будущем будет 22студия
>решарпер вообще тут никаким боком. даже рядом не валялся
я кажется где-то видел, что брейнсы тоже собираются сделать такое
Аноним 28/07/23 Птн 18:37:53 2785946 677
>>2785930
да есть билд для 22 студии. давно есть
просто работает
а) не все фичи
б) регулярно виснет студия

полтора года уже вот как они выкатили "версию для 22 студии" и только что проверил - только этот кривой билд и существует.
Аноним 28/07/23 Птн 19:19:10 2785998 678
>>2785911
Ты злой, токсичный, а ещё и долбоёб, раз спрашиваешь советы на дваче, даже не поопытавшись погуглить то, что тебя интересует. На msdn есть прекрасный туториал на эту тему: https://learn.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-debugger?view=vs-2022

Надеюсь на то, что ты не вкатишься в айти и нам не придётся иметь такого мудака в команде.
Аноним 28/07/23 Птн 20:00:59 2786088 679
https://pastebin.com/rP9amwHE
есть ли способ в подобном случае избавиться от RTTI?
проще всего же сделать свич xx is yy, но это кмк уродство и быстро засрется когда классов-настроек станет больше.
на словаре типов тоже делать не хочется.
ломаю над этим голову уже который день и не понимаю что с этим делать.
assembly1 хранит только настройки и в идеале не должна знать о том что с ними делать будут в assembly2.
Аноним 28/07/23 Птн 20:31:30 2786119 680
.png 31Кб, 490x558
490x558
Пацаны. Помогите.
В общем. Работаю на кафедре. Веду лабы. Раньше было на си.
В этом году - сказали что си не модно и надо первокуров сразу с шарпа учить.
Собственно. Пример одной из лаб которые я даю.
Думаю понятно, дан заголовочный файл, и main.c надо написать реализовать что там объявлено в заголовочном файле, чтобы в результате - вывелось правильное значение.

И чет я не совсем представляю как такое на шарп-то перенести, чтобы первокурсникам было понятно и чтобы типа ощутили как программы, и при этом не городить миллион абстракций.
На си-то это делается банальным свич-кейсом однми и немного с указателями поиграться.
Аноним 28/07/23 Птн 20:31:46 2786120 681
>>2786088
> проще всего же сделать свич xx is yy, но это кмк уродство
Гоферы смотрят на это высказывание с глубоким недоумением.
Аноним 28/07/23 Птн 21:20:17 2786231 682
>>2786088
почему билдер принимает setting? а не конкретный тип
Аноним 28/07/23 Птн 21:55:30 2786309 683
>>2786088
Вообще хз твой пример
Это всё собирает IoC контейнер, а ему писать код не влом
Аноним 28/07/23 Птн 21:56:40 2786314 684
>>2786119
Берешь объект. Предаешь ему другой объект. Вызываешь на последнем методы, которые возвращают значения, которые как-то там высчитываются. Какой метод вызвать выбирай свичкейсом. Вуаля.

Можешь еще один из объектов в отдельную сборку вынести и подключить эту сборку к проекту, где мейн твой. Будет у тебя юзинг красивенький сверху. Сразу +10 очков к ощущению программы...
Аноним 28/07/23 Птн 21:57:53 2786319 685
>>2786120
я к сожалению не гофер
>>2786231
заранее какой конкретный тип будет передан не знаю, поэтому подаю абстрактный, возможно на интерфейс заменю, но суть в том что мне хотелось бы чтобы к конкретному типу настроек создавался конкретный класс их использующий. буду 100% потом добавлять новые конкретные типы.
видимо все-таки придется словарь делать
Аноним 28/07/23 Птн 21:58:18 2786320 686
>>2786314
>один из объектов в отдельную сборку вынести и подключить эту сборку к проекту
подключить динамически, вот и говнокодплагины почувствуют (:
Аноним 28/07/23 Птн 21:59:15 2786323 687
>>2786319
Тот кто передаёт знает, что он передаёт setting1, а не setting2, почему этот код не может вызвать на билдере метод с нужной сигнатурой?
Аноним 28/07/23 Птн 22:19:05 2786338 688
.png 70Кб, 936x795
936x795
.png 14Кб, 363x273
363x273
.png 25Кб, 751x216
751x216
>>>>2786088
ХЗ по теме или нет.
Но я бы как-то так сделал...
Аноним 28/07/23 Птн 22:22:49 2786343 689
>>2785998
Что мешало сразу скинуть мне ссылку и не выёбваться?

>Надеюсь на то, что ты не вкатишься
Надейся. Выбора, кроме вката в ойти, у меня всё равно нет. Так что жди пополнение в своей команде, гавнюк.
Аноним 28/07/23 Птн 22:28:49 2786362 690
>>2786314
Суть лабы - показать как процессор последовательно выполняет команды из потока байт. В том числе, что функция - это тоже просто кусок памяти, куда "перепрыгнет" процессор. Это одна из первых лаб. Дальше по программе - добавляются регистры, стек, метки, ветвление, циклы и прочее и типа к концу семестра - получаем "эмулятор" выдуманного процессора с выдуманным набором команд такой-то и интерпритатор к нему который уже из текстового файла получает набор команд и выполняет их.

Но в шарпе, как я понимаю, просто так передать указатель на ту же функцию - не так просто. Изначально надо вводить абстракции, А это для первокуров - будет сложно. Видимо надо дропать вот такие лабы и как деды - давать студентоте писать хуйню про "напишите программу, которая решит вот это уравнение".

Эх.
Аноним 28/07/23 Птн 22:38:23 2786375 691
>>2786362
>просто так передать указатель на ту же функцию - не так просто
в шарпе для этого делегаты, проще простого
Аноним 28/07/23 Птн 22:40:50 2786378 692
>>2786375
Как я засуну делегаты в массив/стрим байт/интов?
Да. Можно в массив object засунуть но тогда тот код будет просто нечитем.
Аноним 28/07/23 Птн 22:41:46 2786380 693
>>2786378
Говнокод с твоего пика точно так же нечитаем, держу в курсе
Аноним 28/07/23 Птн 22:42:48 2786382 694
>>2786362
совковая школа цветёт и пахнет, ууух
Аноним 28/07/23 Птн 22:48:06 2786393 695
>>2786362
Чел, я с продуктами твоего обучения каждый день на работе сталкиваюсь. Нихуя они не будут знать ни про процессор, ни про регистры ни про стек с кучей. Пожалей жеребят. Учи прикладному чему-то, а не низкоуровневой хуйне, которая без пару лет практики на реальной работе все равно не усвоится.
Аноним 28/07/23 Птн 23:00:14 2786407 696
>>2786382
>>2786393
Это же лаба для первого курса. Учить прикладным вещам, без базовых - странно. Вы же не учились рассчитывать ежемесячный платеж по кредиту - не освоив как складывать числа?
Прикладные вещи - со второго курса начинаются.

А я просто хочу чтобы интересно ребятне было. В прошлом и позапрошлом году вот так давал - и большинству понравилось. Сам помню как горел с лаб в духе: напишите программу, которая проверяет "пароль", напишите программу которая вычислит: "f(x) = sin(x)+tg(x) + 3.14 / 2", напишите программу которая вычислит число фибоначи для 10, напишите программу, которая найдет все простые числа. Ужас. Как вспомню первый курс свой. А это - как по мне - весело и интересно. Плюс типа к концу семестра типа почти законченный маленький проектик, а не laba_1, laba_2.
Хотя хз. Вы тут чет накинулись. Даже неуютненько стало.
Аноним 28/07/23 Птн 23:02:02 2786408 697
>>2786407
Ты что бы использовать микроволновку тоже изучаешь какой хим состав меди в проводах? Или может хотя бы как работает магнетрон?
Аноним 28/07/23 Птн 23:08:06 2786418 698
>>2786408
Ну, лично я, как минимум - изучаю принцип работы. Для новых и совсем непонятных мне штук - еще ищу от более шаристых объяснения, как оно там работает. А как иначе-то? Мне как-то не хочется оказаться в сводках новостей из-за того что я неправильно пользовался микроволновкой и у меня квартира сгорела или еще что-то страшное произошло.
Аноним 28/07/23 Птн 23:08:58 2786420 699
>>2786407
Братан, базовые знания в программировании в 21 веке это не то, как работает процессор. Это очень далеко от вещей, которыми занимаются большинство кодеров. Об этом позаботились бородатые дядьки еще десятки лет тому назад.
Аноним 28/07/23 Птн 23:12:11 2786425 700
>>2786418
Ты энтузиаст. 95% людей достаточно знать про микроволновку, только куда нажать и за что потянуть, чтобы получить ожидаемый результат.
Аноним 28/07/23 Птн 23:13:58 2786429 701
>>2786407
Хоть убей не понимаю, чем
>напишите программу которая вычислит: "f(x) = sin(x)+tg(x) + 3.14 / 2
скучнее чем то что ты там выложил изначально.
Если накинуть какие-нибудь фракталы или там дифурчики и визуализацию, то вообще ништяк. Как раз на шарпах окошки с графикой приятно писать.
Аноним 28/07/23 Птн 23:16:45 2786433 702
>>2786425
Тем более для таких пишут инструкции.

>>2786418
Как будешь поступать с закрытыми системами коих вокруг нас огромное количество?

А некоторые знания тебе вообще никак не помогут. Все тут сидящие думаю постоянно оплачивают картами покупки но помогут ли им знания о протоколах бесконтактной оплаты и внутреннем процессинге банков?
Аноним 29/07/23 Суб 06:22:40 2786637 703
Как реализовать обработку данных из очереди в другом потоке? Если просто запустить цикл while(true), то одно ядро будет постоянно загружено на полную. Если добавить Thread.Sleep(1), то обработка будет происходить не сразу, после добавления элемента в очередь.
Аноним 29/07/23 Суб 09:38:45 2786676 704
>>2786637
Она в любом случае не будет сразу происходить.
Если для тебя эта 1мс прям так критичен - пихай в тредпул обработчик и все.
Аноним 29/07/23 Суб 10:43:19 2786707 705
>>2786637
Берешь ConcurrentStack. Хуяришь TryPop в while(true), другими потоками делаешь Push. Вот тебе продакшен реди решение, не благодари.
Аноним 29/07/23 Суб 11:50:15 2786740 706
>>2786707
>>2786637
> одно ядро будет постоянно загружено на полную
Аноним 29/07/23 Суб 12:15:11 2786755 707
>>2786740
Прокинь AutoResetEvent в бесконечный цикл и в метод, где у тебя push происходит. Пусть луп поток ждет сигнала в waitOne(). Когда кто-то добавит элемент в очередь он вызовет .set(). Луп поток разблокируется и выполнит TryPop. Затем опять вернется на исходную, ожидая вызова .set().

Но лучше просто тред слип юзай и проверяй очередь 10 раз в секунду или типа того. Человеческому глазу эта задержка не заметна.
Аноним 29/07/23 Суб 13:20:29 2786820 708
Аноним 29/07/23 Суб 13:42:24 2786847 709
>>2786820
Чел хочет чтобы задача сразу после попадания в очередь начинала выполняться.
Соответственно, ему вот эти вот переключения шедулера, чтобы пройтись по задачам и найти ту что выполняется - критические. Скорее всего он пишет свою RTOS на шарпе. Или под микроконтроллеры что-то программирует(соответственно все эти getNext - очень долго будут выполняться, да и растущий тредпул - тоже не круто)
Собственно, потому - все эти вот решения с очередями, каналами с эвейтами и прочее - не подходят.
Надо делать либо свою систему прерываний, либо брать ReadWriteLock/ResetEvent, ну или если хочется сэмулировать async-await - можно взять TaskCancellationSource

А эти вот Channel - там задержка такая, что под микроконтроллеры брать ни в коем случае нельзя.
Аноним 29/07/23 Суб 13:43:56 2786851 710
>>2786847
> TaskCancellationSource
TaskCompletionSource конечно. Чет в голове слегка смешалось пока писал.
Аноним 29/07/23 Суб 13:49:01 2786860 711
>>2786847
>Чел хочет чтобы задача сразу после попадания в очередь начинала выполняться.
В каналах есть специальная опция для этого allowSyncCompletion
Аноним 29/07/23 Суб 13:49:50 2786863 712
>>2786847
>Скорее всего он пишет свою RTOS на шарпе. Или под микроконтроллеры что-то программирует
Из его поста это никак не вытекает. Больше похоже, что он пытается в велосипед, когда уже есть датафлоу или те же каналы.
Аноним 29/07/23 Суб 13:50:30 2786864 713
>>2786851
TaskCompletionSource тоже с оверхедом, тогда уж ValueTask надо использовать
Аноним 29/07/23 Суб 15:01:48 2786954 714
Объясните к чему именно идет биндинг.
Допустим у меня есть свойство типа FileInfo. Само свойство вызывает событие INotifyProprtyChanged, но привязаться мне надо к FileInfo.Name, в котором вряд ли реализован INotifyProprtyChanged.

Не будет ли утечек памяти, если я привяжусь к FileInfo.Name? Или надо пилить ValueConverter?

Как ведет себя привязка? Она биндится к FileInfo, а затем ищет внутри свойство Name, или же биндится напрямую к Name?
Аноним 29/07/23 Суб 16:29:39 2787019 715
>>2786637
ужас
BlockingCollection для этого и придуманы
для async Channel
Для любителей пониже уровнем могут лепить свое с AutoResetEvent и другими примитивами синхронизации.
Аноним 29/07/23 Суб 18:13:35 2787142 716
>>2786418
> принцип работы
Уравнения Максвелла напиши мне. Без гугла.
Аноним 29/07/23 Суб 20:04:42 2787255 717
Тут кто-нибудь работал со SkiaSharp? Возможно ли в нем рисовать вне Ui потока? В Win2d такое дозволяется, если использовать CanvasSwapChainPanel.
Аноним 29/07/23 Суб 23:03:56 2787456 718
>>2787255
Я работал. Что значит рисовать вне UI потока? Ты понимаешь, что такое UI-поток? Рисовать вне его - невозможно, если ты хочешь увидеть результат своего рисования. Возможно, если ты с результатом делаешь что-то еще, типа сохраняешь в битмапу - в таком случае просто создаешь канвас и рисуешь лол.

Если ты имеешь ввиду есть ли для SkiaSharp контролы под UI либы - есть, под все шарповые вроде.
Аноним 30/07/23 Вск 01:45:15 2787566 719
>>2787456
Он про то что искусственное ограничение на работу с юи в один поток лишь от отсутствия блокировок и синхронизаций и что в либах где они заимплеменчены можно не заморачиваться
Аноним 30/07/23 Вск 04:53:00 2787588 720
>>2787456
> Я работал. Что значит рисовать вне UI потока?
То и значит, берешь и рисуешь в любом потоке, как я уже писал CanvasSwapChainPanel позволяет это. К тому же в Uwp помимо ui потока есть еще и поток Composition, так что никаких проблем с отображением результата нет.
Аноним 30/07/23 Вск 04:54:20 2787589 721
>>2787588
Вот собственно документация
> Using theCreateCoreIndependentInputSourcemethod, apps can process input and render to a SwapChainPanel entirely on one or more background threads. This enables high performance input and rendering independent of the XAML UI thread
Аноним 30/07/23 Вск 09:33:48 2787641 722
Аноны, как в впa ошибки отлавливать
Я пока решил не использовать MVVM, потому что в моем интерфейсе литералли 2 кнопки и мне нужен текст элемент, чтобы ошибки показывать.
В инфраструктуре есть класс GoogleLensUploader, который имеет метод UploadImade принимающий byte[] и вызывает несколько других методов, которые отсылают запросы и возвращают string.
Также в инфраструктуре я разместил кастомный json converter и враппер, который принимает этот конвертер и возвращает мож модель TextRow из домена.
Вся эта хуйня через dependency injection используется а application слое, который уже и используется в моем mainwindow.
Так вот, как в таком проекте ошибки отлавливать и рендерить из на текстовом элементе юзеру?
Аноним 30/07/23 Вск 09:37:38 2787645 723
>>2787641
> впа
впф*
Ну и да, в интерфейсе буквально 2 кнопки, само mainwindow принимает ClipboardMonitor и подписывает метод на его эвент, который говорит, обновился ли буфер обмена и есть ли в нем картинка.
А 2 кнопка отписывает от ивента.
Аноним 30/07/23 Вск 11:49:05 2787701 724
>>2787588
Синхронизация все ещё есть, просто на уровне DXGI и DirectX.

Со скиа так не канает, вроде потому что angle на котором скиа работает, не реализует эту фичу, Майкрософт пыталась сделать это в форке, но я хз попало ли это в апстрим Гугла.

В итоге сейчас да, в xaml контролы нужно рисовать по макету.
Аноним 30/07/23 Вск 11:50:20 2787702 725
>>2787701
>по ивенту

быстро фикс
Аноним 30/07/23 Вск 13:28:44 2787751 726
>>2787701
>>2787702
Вижу ты в этом хорошо разбираешься. Можешь посоветовать какую-нибудь литературу по теме?
Аноним 30/07/23 Вск 13:50:36 2787790 727
>>2787641
>Аноны, как в впa ошибки отлавливать
Если тебе нужно отлавливать ошибки конкретно WPF части, типа биндингов всяких, которые логгер не подхватывает по дефолту, то ты можешь создать собственный регистратор ошибок, а уже в нем логгировать как тебе угодно. Гугли TraceListener.

Ну во всем остальном логгирование ничем не отличается — берешь Serilog или NLog библиотеку и логгируешь себе.
Я юзал Serilog, у него есть различные модули: срать в консоль, в окно интерпретации, в текстовый файл, либо в RichTextBox (что тебе подойдет, вероятно). Все эти модули хранятся в нюгете отдельно, посмотри туторы.

Добавляешь логгер в качестве сервиса, вводишь различные настройки, билдишь его, и дальше либо твои сервисы запрашивают экземпляр логгера у хоста, либо ты обращаешься к статическому классу логгера из любой точки приложения (что будет удобнее).

Дальше в конструкторе своего класса GoogleLensUploader пишешь что-то вроде
var logger = Log.Logger.ForContext<GoogleLensUploader>;
где Log - статический класс, а Logger это экземпляр сервиса.
ForContext - это запрос у сервиса логгирования экземпляра логгера в контексте твоего класса
Указание типа класса позволит логгеру при каждой записи автоматически подставлять путь этому классу, чтобы читая лог понимать, откуда источник логгирования.

Далее в методе UploadImade ты на свое усмотрение используешь на выбор методы:
logger.Verbose("Очень подробная информация")
logger.Debug("Подробная информация")
logger.Information("Просто информация")
logger.Warning("Очень важная информация")
logger.Error(ex, "Охуеть как важная информация")
logger.Fatal(ex, "Все, пиздец. Приехали.")

Это запись в лог на разных уровнях. Использовать можешь что угодно не сдерживая себя, потому что можно установить ограничение уровня на этапе построения сервиса, например для того, чтобы в релизной сборке логгировались только Warning, Error и Fatal, а в режиме отладки еще и Verbose и Debug.

А результате в лог будет записано что-то вроде этого
[VRB 13:25:00:179 MyApp.MyNamespace.GoogleLensUploader] Очень подробная информация
[DBG 13:25:00:180 MyApp.MyNamespace.GoogleLensUploader] Подробная информация
[INF 13:25:00:181 MyApp.MyNamespace.GoogleLensUploader] Просто информация
и так далее ...
Сам формат вывода информации: уровень, время, путь к классу — все это настраивается и ты можешь что-то убрать, или же добавить. Так же ты можешь писать логи параллельно в текстовый файл и в окно юзера — тоже на разных уровнях. Вариаций масса.
Аноним 30/07/23 Вск 18:49:25 2788212 728
>>2787751
Из литературы по сути ток документации по графическим апи и может быть статьи по типу "как устроен vulkan". Я когда вкатывался, у меня долгое время было плато непонимания чо происходят нахуй, но потом втянулся. Рекомендую не начинать с opengl, хотя в инторнетах пишут обратное.

В современных апи типа вулкана с интероперабельностью все намного лучше чем в том же opengl. Например я совсем недавно решал задачу рендера на вулкане как раз в WinUI3 шную SwapChainPanel. То есть дружил вулкан и директ. Сделал на гитхабе репу - может какому анону поможет.

Если есть какие-то конкретные вопросы, можешь задавать, постараюсь развернуто ответить.
Аноним 30/07/23 Вск 18:53:34 2788215 729
>>2788212
Можешь скинуть ссыль на репу? Интересно было бы посмотреть.
Аноним 30/07/23 Вск 18:56:29 2788220 730
>>2788212
> WinUI3
Если не секрет, отчего такой выбор? Вроде как самый сырой и медленный XAML фреймворк.
Аноним 30/07/23 Вск 19:58:02 2788281 731
>>2788215
как то так - https://github.com/malstraem/vulkan-interop-directx

>>2788220
>Если не секрет, отчего такой выбор? Вроде как самый сырой и медленный XAML фреймворк.

Не соглашусь. Сыроват? Да сыроват. Но количество мощных контролов и консистентная тема под современную винду решают. Композинг удобный, сам xaml опять же сильно прокаченнее WPFного. Ну все это у него от UWP, но так как UWP официально фсе - то получается современный фреймворк под шинду это винурина3, ничего не поделать.

Если есть требования или перспектива кросс платформы, то лучше Avalonia выбрать, они как раз недавно жирный апдейт выкатили. Мы просто когда стартовали новый проект на работке - из требований заказчиков (аэропорты в основном) была только шинда, они все на ней сидят и сидеть будут.
Аноним 30/07/23 Вск 20:02:26 2788284 732
изображение.png 240Кб, 1920x1040
1920x1040
Я просто создал пустой проект Xamarin.Forms и попытался запустить его, ничего в нём не меняя. В чём проблема? В уебных роликах и статьях всё нормально. Использую VS 2022 Enterprise.
Аноним 30/07/23 Вск 22:17:28 2788481 733
>>2788284
потому я и выучил котлин для андроидов
Аноним 30/07/23 Вск 23:34:07 2788554 734
>>2788284
Нужно попердолиться, почистить проект, иногда вручную поудаляв build, obj, поискать версию maui на предмет таких issues на гитхабе. Там анон говорит, что котлин выучил – я могу его понять. Хотел поиграться, но такие косяки отталкивают. Да и сам фреймворк какая-то срань – в 2023 году столько бойлерплейта, XAML с его допотопным синтаксисом. После этого реакт и css ощущаются как космолёт. Но это веб
Аноним 31/07/23 Пнд 14:29:26 2789095 735
изображение.png 24Кб, 334x274
334x274
Блин, шаблоны прикольные штуки, но как-то их непривычно юзать. Собственно вопрос: вы часто юзаете такой синтаксис? Или лучше как обычно писать свич и возвращать из метода через return
Аноним 31/07/23 Пнд 14:33:16 2789102 736
>>2789095
Когда удобно тогда и юзаю. На тех кто не осилил прочитать релиз ноты по версиям шарпа чихал
Аноним 31/07/23 Пнд 14:53:52 2789145 737
>>2789095
База. Лист паттерн матчинг и возможность объявлять переменные если они попадают под условие - мега охуенно.
Аноним 31/07/23 Пнд 15:11:43 2789179 738
Аноним 31/07/23 Пнд 15:21:16 2789202 739
>>2789095
Свич использую в основном для enum, а там все просто:
Я использую сниппет свича, который автоматом расставляет кейсы, дальше я его заполняю и студия предлагает превратить в шаблон.

По сути я ничего не делаю для этого. В чем дилемма? Выглядит компактнее, а большего и не надо.
Аноним 31/07/23 Пнд 21:13:45 2789705 740
Мне дали тестовое задание сделать калькулятор webapi с эндпоинтами для всех операций и одним эндпоинтом для того, чтобы вычислить сложное выражение.
Они же хотят, чтобы я сделал модели для этих операций, присобачил к ним валидацию и потом их реюзнул в последнем эндпоинте, да?
Аноним 31/07/23 Пнд 21:32:26 2789727 741
Аноним 31/07/23 Пнд 21:41:23 2789742 742
>>2789705
Непонятно, как будет выглядеть этот калькулятор. Может быть, там надо распарсить строку? Тогда зачем вебапи, неужели просто один аргумент принять?
Аноним 31/07/23 Пнд 21:45:13 2789747 743
>>2789742
Ну тип стучишься на эндпоинт /calc/pow даешь ему 2 числа и он тебе высылает ответ, либо говорит, что ты мудак.
Все тоже самое с другими простыми операциями, но последняя типа должна их всех объединять, насколько я понимаю.
Вот ток я думаю, че они именно хотят, чтобы я им показал.
Аноним 01/08/23 Втр 05:47:00 2789888 744
>>2789747
> объединять
Как? Передавать название операции отдельно?
> я думаю
Зачем думать над мутным условием, если можно и нужно спросить, что они имеют ввиду?
Аноним 01/08/23 Втр 09:42:12 2789929 745
>>2789705
>вычислить сложное выражение.
>Они же хотят,
Ты уже обосрался с тестовым. Никогда не угадывай того, что хочет заказчик. Если есть непонятка - значит нужно уточнить.
Очень часто в тестовых делают такие мутные места, чтобы посмотреть как поведет себя кандидат.
Поэтому сначала прорабатываешь, придумываешь два...три возможных варианта (чтобы их предложить, а не тупо спрашивать "я ни понил") и задаешь вопрос тому кто выдал тестовое.
Аноним 01/08/23 Втр 12:05:45 2790103 746
изображение.png 92Кб, 755x636
755x636
Что опять сломалось в этой хуевине?

Выскакивает ошибка при поиске на кнтрл+т: "Функция "Перейти к" сейчас недоступна из-за внутренней ошибки." Трассировка стека: https://pastebin.com/UyPHCjQ4

Сам поиск при этом работает отлично, но меня очень выбешивает этот постоянный алерт.

Если не знаете как исправить ошибку, может подскажите как ее спрятать?
Аноним 01/08/23 Втр 13:44:16 2790202 747
>>2789705
чел, от тебя просто хотят получить решение рабочей таски, никогда не делай тестовое, если оно не оплачивается
Аноним 01/08/23 Втр 14:34:25 2790241 748
>>2790202
да ну. кому нужен вебкалькулятор
Аноним 01/08/23 Втр 16:34:51 2790395 749
изображение.png 78Кб, 695x715
695x715
Блять
Аноним 01/08/23 Втр 17:28:47 2790502 750
>>2790395
Нечего гкглить на русском.
Аноним 01/08/23 Втр 20:27:49 2790785 751
>>2789095
Использую, где это удобнее.
Всякие бизнес-руллы, где правила в духе: Если последний раз был больше недели назад, но меньше чем 3 недели и при этом является привилегированным пользователем, со знаком зодиака рак - то это, если ...
Ну ты понял. Вот в таких случаях - все эти охуенные правила удонбо запихнуть в tuple и достать нужный обработчик, чтобы дергнуть.
Еще, если просто у нас в зависимости от типа объекта - надо куда-то передать, то диспечер такой хуйней удобно мутить.

Где это скорее вызывает неудобства - не использую.

Сам синтаксис - как по мне неудачный. Лучше бы отдельное слово намутили типа match, убрали бы эту стрелку ненужную и было бы типа:

var x = some match
{
> 0 and < 10 : "Ok",
default : "Ne Ok"
}
Аноним 01/08/23 Втр 22:16:51 2790833 752
изображение.png 133Кб, 930x1057
930x1057
>>2790395
мы все о тебе поняли
Аноним 02/08/23 Срд 10:39:01 2791071 753
изображение.png 48Кб, 419x525
419x525
изображение.png 88Кб, 1158x308
1158x308
Как понять третий пункт?
Аноним 02/08/23 Срд 10:45:24 2791073 754
>>2791071
На пике все работает
Аноним 02/08/23 Срд 11:22:16 2791110 755
Можно в студии как-то пометить папку в обозревателе решений, чтобы она не участвовала в автоматическом создании неймспейса?

Просто в самом обозревателе разные типы не подсвечиваются, как например в InelliSence, и отличить класс от enum невозможно. Хочу для енумсов выделить отельную подпапку — чисто для чистоты иерархии обозревателя.

Пытался перед именем поставить какой нибудь префикс, типа '#Enums', и в принципе студия болше не предлагала переназначить неймспейс при дропе туда файла, но она упорно создает неймспейс, если я создаю в этой папке новый файл — при этом она символ '#' заменяет на '_'.

Так вот, есть ли какой-то волшебный префикс, который говорит студии don't do that.
Аноним 02/08/23 Срд 11:43:08 2791123 756
>>2791110
В решарпере есть надстройка для исключения папки из формирования неймспейса в идее тогда тоже должно быть. Голая студия такое себе
Аноним 02/08/23 Срд 12:57:15 2791227 757
Аноним 02/08/23 Срд 18:55:39 2791770 758
шарпаны, что сейчас можно использовать самое легковесное если я хочу к консольной программке прикрутить гуй? без завитушек, просто окошки, не кросс платформа. WPF?
Аноним 02/08/23 Срд 19:00:55 2791773 759
Аноним 02/08/23 Срд 20:09:50 2791837 760
>>2791770
Рисуй ui в терминале. Самый быстрый путь
Аноним 02/08/23 Срд 21:51:18 2791931 761
Аноним 02/08/23 Срд 22:36:41 2791964 762
>>2791071
Попробуй теперь к базовому классу скастовать свой Kuk
Аноним 02/08/23 Срд 22:38:48 2791967 763
>>2791770
Винформы либо WinApi легковеснее не придумаешь.
Аноним 03/08/23 Чтв 01:37:09 2792070 764
>>2791773
>>2791837
>>2791931
>>2791967
что по авалонии скажете? там вроде бы новая версия недавно вышла модно-молодежно
Аноним 03/08/23 Чтв 01:41:09 2792071 765
>>2792070
Ничего. Я либо cli/tui тулзы пишу либо вебовый гуй. Когда то немного ковырял впф но мне он показался оверинженереным
Аноним 03/08/23 Чтв 02:58:34 2792087 766
>>2792070
Авалонию надо долго сидеть и изучать, она для реально большого и сложного проекта, далеко выходящего за "прикрутить гуй к консольной программке".
Аноним 03/08/23 Чтв 12:21:37 2792398 767
>>2792070
это если тебе нужно кросс
иначе не нужно. Да и шрифты у нее хреновые.
Аноним 03/08/23 Чтв 15:09:00 2792566 768
изображение.png 358Кб, 1477x700
1477x700
Аноним 03/08/23 Чтв 15:16:05 2792584 769
Аноним 03/08/23 Чтв 17:20:11 2792847 770
изображение.png 98Кб, 845x610
845x610
Всем привет. Скажите, пожалуйста, почему этот код не вывод в браузер текст? У чела, который показывает как сделать сервак с нуля данный код вывод текст на страницу. Может разница в версиях .net? Сам чел https://www.youtube.com/watch?v=Al2mZg_-XQk
Аноним 03/08/23 Чтв 17:24:30 2792852 771
>>2792847
Мне лень открывать говорящие головы но с уверенностью могу сказать что на скрине лажа. Браузеру нужно хттп а не хелло в ответ.
Если ты приконектишься на порт условным телннтом или нц то он выведет
Аноним 03/08/23 Чтв 17:30:03 2792858 772
>>2792852
Эт я уже вычитал на StackOverflow. Прикол в том, что у него всё работает, а у меня нет. Думаю на той версии, которая у него можно было. А на .NET 7 уже нельзя. Хотя странно, вряд ли за такой короткий промежуток времени могли что-то сильно поменять
Аноним 03/08/23 Чтв 17:44:11 2792879 773
>>2792847
Нет, дотнет тут вообще не при чём. Это у того чела кривой браузер, а у тебя нормальный.
Аноним 03/08/23 Чтв 17:46:27 2792885 774
>>2792879
Походу мазила с 2021 года что-то обновила и стало работать так, как сейчас. Спасибо за ответ
Аноним 03/08/23 Чтв 18:01:37 2792911 775
>>2792858
Не в дотнете дело. Это НЕ могло никогда работать. Максимум что могло быть это какой либо браузер работает специфично
Аноним 03/08/23 Чтв 18:13:56 2792929 776
.png 23Кб, 988x696
988x696
>>2792847
Делай как я! Не хочу быть единственным в треде, кто такой хуйней занимается.
Аноним 03/08/23 Чтв 18:16:50 2792934 777
>>2792929
Ты единственный в треде, кто такой хуйней занимается.
Аноним 03/08/23 Чтв 18:25:58 2792940 778
>>2792934
ВОТ УВИДИТЕ! Я СДЕЛАЮ СВОЙ ТЦП ФРЕЙМВОРК ДЛЯ СЕРВЕРА, КОТОРЫЙ БУДЕТ УДОБНЫЙ КАК МИНИМУМ ДЛЯ МЕНЯ!

Знал бы только как удобно роутить сообщения без всяких извращенств(рефлексия ацтой!). Типа вариант Route<Context,MessageType> - не нравится, делать извращения про Route("{protocol}/{messageType}") - тоже не хотю. Пока что делаю как в первом варианте.
Еще хотелось бы несколько протоколов на одном "сервере" обрабатывать, но тута проблема в том, что тогда надо хранить буффер при парсинге, а это лишняя память для вот такого редкого случая.
И еще не хочется выносить на уровень событий отправку сообщений. Но без этого - какая-то хуйня выходит(приходится семафорчиком ограничивать отправку) если у нас многопоток и вся хуйня.

Короче. Да.
Аноним 04/08/23 Птн 01:03:33 2793309 779
>>2792940
>рефлексия ацтой!
только для тех кто не умеет ее готовить.

есть хендлеры которые нужно как то роутить. Собственно хендлеры в классах. Если у нас заранее известен набор роутов, то можно хоть интерфейсами, которые классы хендлеры должны реализовать и зарегать себя как обработчики

Иначе же нуно как то указывать что куда мапится. и тут понятно 2 варианта - 1 многочисленные Add(....route info..., handler) в одном месте 2 аттрибуты конечно. Ну и 3 это когда класс хендлер делает пункт 1, но в себе для своих хендлеров.

кто любит декларативщину выбирает аттрибуты. А далее все сделает рефлексия разобрав все это дело и нагенерив в рантайме caller-ы для хендлеров

но даже в варианте 1 рефлексии не избежать если хочется делать биндинг на параметры

В общем то ничего сложного.
Аноним 04/08/23 Птн 05:57:49 2793389 780
.png 105Кб, 916x683
916x683
>>2793309
Я вот так примерно делал.

Ацтой, потому что выглядит рефлексия вот так как на прикриплейде. И вот я сам писал это полгода назад и не сразу вспомнил как оно работает.

Ну и про сложность. Не сложно. Просто у меня после какого-то времени - возникла мысль, что это становится похоже на магию и правильнее обязать того кто пользуется - реализовывать интерфейс IDispatcher<TContext,TMessage> и заставлять свой диспечер сообщений к серверу цеплять, а там человек как ему удобно так и задиспечеризирует сообщение.
Аноним 04/08/23 Птн 10:20:51 2793467 781
изображение.png 30Кб, 485x156
485x156
Слушайте, а как сконфигурировать http ответ от сервера, если я хочу отправить текст на страницу в браузер. Пока что написал вот это:
Аноним 04/08/23 Птн 10:22:11 2793470 782
>>2793467
Скорее вопрос в том, какой заголовок отвечает за тот текст, который я хочу отправить. Типо в какой заголовок этот текст засунуть, чтобы потом вытащить на страницу в браузере
Аноним 04/08/23 Птн 10:24:39 2793475 783
>>2793470
Тебе то что отобразится не в хэдеры нужно пихать а в боди. curl -v тебе в руки и rfc по http 1.0/1.1
Аноним 04/08/23 Птн 11:04:25 2793518 784
изображение.png 21Кб, 449x124
449x124
изображение.png 38Кб, 1915x450
1915x450
>>2793475
Всё, я понял. То, что находится снизу заголовков - тело. В прицепи логично. Почти как в хтмл структура
Аноним 04/08/23 Птн 14:58:31 2793857 785
image.png 732Кб, 1001x582
1001x582
В конце 2022 я ушёл от стека CRM Creatio от Террасофт (бэк на дотнете, фронт на JS). Так как прекращал отношения с российской фирмой, так как накапливались сложности с переводами деняк за рубеж (это был мой второй проект из двух параллельных).

Но релокационные аутстафф-галлеры платят мало, Грузия страна дорогая. Я нашёл бывшую российскую компанию, которая успешно продвигает Creatio в Азии и Центральной Америке. У меня отличный опыт и портфолио, так что поставил ценник в пять тысяч чистыми. Это реально решит сейчас все мои проблемы и позволит копить на Европу (ещё осенью квартиру в ДС продам и, при хорошем раскладе, за всякими минусами ипотеки/риэлтора выведу в Грузию тысяч 130).

Тема крутая, финтех и доллары, но как при этом развиваться? На проектах Creatio я даже нормальных юнит-тестов не встречал, не говоря уже про работу с мультипоточностью и всякие фишки поздних версий .Net. И фронт там сейчас неакутальный, ExtJs, а я хочу погрузиться в божественный Ангуляр.
Аноним 04/08/23 Птн 15:35:00 2793918 786
>>2793389
ну выглядит и выглядит. лишь бы работало. Ну разве что медленно ибо рефлексия.

хотя я бы не делал в RouteDescriptor сам вызов, да и Func<MethodInfo тоже
Аноним 04/08/23 Птн 16:02:23 2793963 787
>>2793918
По уму рефлексия один раз при старте отрабатывает и потом уже переиспользуются результаты либо генерится на их основе ил
Аноним 04/08/23 Птн 18:53:45 2794286 788
>>2793857
В Восточной Европе больше половины вакансий на .Net это .Net Core + Angular (в разных вариациях, но суть та же). 5к чистыми, ты тут не получишь, но если ты весь из себя синьор-помидор, то может и 6 вытянешь, в среднем около 4.
Хочешь больше? Ищи клиента в штатах/Канаде. Собственно я так и сделал, клиент в Канаде за 6 и местный за почасовую ставку, обычно 2-3,5к/месяц.
Развиваться норм, если писать на коре, то всё хорошо поддерживается. Если команда норм, то проект будет сиять от новых технологий и 90% покрытия тестами.
Аноним 04/08/23 Птн 22:32:06 2794516 789
На днях у нас в компании решили пересадить всех разрабов на линукс. Сказали что те кто будет работать под виндой и жаловаться на баги вследствие перехода на линукс будут получать пизды. Какие подводные, там же разницы нет где собирать проект? Asp dot net + Blazor
Аноним 05/08/23 Суб 00:59:07 2794614 790
>>2794516
Выстрелит какая-нибудь древняя залупа, которой нужен COM.
Аноним 05/08/23 Суб 01:14:14 2794629 791
>>2794516
Накатываешь на студию/vscode/райдер нужные плагины. Разрабатываешь на винде, собираешь на винде, деплоишь по SSH на линукс, запускаешь там, цепляешьшся к работающему билду, дебажишь из под винды и в хуй не дуешь.
Аноним 05/08/23 Суб 02:20:53 2794657 792
>>2794629
В студии из коробки есть вариант прозрачного запуска под всл
Аноним 05/08/23 Суб 02:56:07 2794677 793
>>2794516
а чем они эту мочу в голове оправдывают?
Аноним 05/08/23 Суб 06:35:29 2794707 794
Что значит deleage {} ?
> static event EventHandler Changed = delegate { };
Аноним 05/08/23 Суб 08:37:32 2794744 795
>>2794677
Не знаю как у него, но сейчас в компаниях, которые имеют дело с гос сектором или разрабатывают для компаний которые работают с гос сектором - опять пошла пьянка, что сертификация винды - усе, пересаживайтесь на какую-нибудь астру или пиздуйте.
>>2794516
Ну, прям критично - ничего. Особенно если райдер есть. Но блядь. Насколько же студия - удобнее.
Аноним 05/08/23 Суб 10:29:26 2794772 796
image.png 20Кб, 183x151
183x151
В ру сегменте есть шарп сообщество на ютубе (возможно единственное, слушаю их за новости), так те упоролись и начали пилить видосы по расту, ну собственно восхищаться им (за деньги или сами "осознались", непонятно).

Так вот, они запили видос с лайв-кодингом или местным литкодом (точно не помню). И все это происходит с периодическим "методом тыка". И так забавно смотреть, как, вероятно, серьезные разработчики, тыкаются в синтаксис аля школота и при этом восхищаются этим продуктом.

Как это работает? Чем больше тебя язык ущемляет, загоняет в рамки и заставляет себя чувствовать не комфортно, тем сильнее ты его любишь и считаешь его правильным?
Аноним 05/08/23 Суб 10:42:43 2794783 797
>>2794772
Эту кучку пидорасов нужно выгнать нахуй с канала посвященному дотнету. Пусть валят на свои каналы по расту, раз не хотят пилить конент по дотнету.
Аноним 05/08/23 Суб 12:08:06 2794806 798
Аноним 05/08/23 Суб 12:09:50 2794807 799
>>2794772
> Как это работает? Чем больше тебя язык ущемляет, загоняет в рамки и заставляет себя чувствовать не комфортно, тем сильнее ты его любишь и считаешь его правильным?
Та не.
Просто раст типа на хайпе.
Хотя сам раст - то еще говно ебаное.
Вот срсли. Хуй пойми нахуй он нужен. Те области где он типа нужен - на си нормально живут и будут жить дальше без раста.

Вот F# - тема. Как мне грустно, что сколько не пытался в прод запихнуть - никто не хочет. Приходится грустно в стол дома на нем чет делать. А ведь блин. Ну охуенный же язык. И .net никуда не девается. Но нет. F# не будем юзать, хоть ты тресни, и никакие аргументы не работают.
Аноним 05/08/23 Суб 12:18:11 2794814 800
Аноним 05/08/23 Суб 13:57:30 2794923 801
>>2794707
значит подписан пустой делегат, чтобы при вызове события не проверять на null потому что он никогда не будет null

>>2794807
>на си нормально живут
ага. только постоянно находятся ошибки связанные с переполнением памяти и тому подобным.
Аноним 05/08/23 Суб 15:20:06 2795071 802
2023-08-0515-12[...].png 24Кб, 1002x164
1002x164
Почему я не могу вызвать событие "PropertyChanged" в ObservableCollection?

Сначала студия ругалась, на это
public event PropertyChangedEventHandler PropertyChanged;
якобы такое событие уже есть. Но я не могу его вызвать, символ молнии события помечен "звездочкой". Что это?
Аноним 05/08/23 Суб 15:55:50 2795120 803
>>2795071
Потому что эвент можно вызвать только с класса, на котором он объявлен.
Аноним 05/08/23 Суб 23:09:43 2795496 804
>>2795071
Чо ты пытаешься сделать лол. Как уже написали, событие может вызвать только его владелец, то есть даже наследник класса не сможет инвокнуть ивент родителя. Потому что - как ты себе это представляешь? Объекты поднимают ивенты согласно внутренней логике когда меняется какой их стейт - тебя нельзя вмешиваться в этот процесс, в этом смысл ивента и в целом паттерна наблюдатель.
Аноним 06/08/23 Вск 00:38:06 2795582 805
>>2795496
ну технически есть виртуальные события, но их нужно уметь готовить
Аноним 06/08/23 Вск 08:40:58 2795671 806
>>2795582
Это очень кривая хуйня, никогда так не делай или будешь избит коллегами. Но даже так это все ещё два разных события, просто в откройте ты руками через add и remove подписываешься ещё и на базовый ивент.

Для того чтобы у наследника была возможность поднять ивент - просто оберни вызов в метод.
Аноним 06/08/23 Вск 08:42:20 2795672 807
>>2795671
>откройте
оверрайд

быстрофикс
Аноним 06/08/23 Вск 09:32:34 2795699 808
>>2795671
>Это очень кривая хуйня
что удивляет почему так
почему при вызове виртуального метода ищется оверрайд метод и он вызывается
А вот события сделали через жопу. Зачем вообще слово виртуал если оно таковым не является

это еще одно в копилку "разрабы шарпа - рукожопы"
Аноним 06/08/23 Вск 09:42:28 2795703 809
>>2793309
>но даже в варианте 1 рефлексии не избежать если хочется делать биндинг на параметры
Избежать, сорс генераторами, в нет8 над этим работают
Аноним 06/08/23 Вск 09:47:20 2795704 810
>>2795703
только это не будет первым вариантом.
Аноним 06/08/23 Вск 09:48:45 2795706 811
>>2795704
минимал апи это не первый вариант?
Аноним 06/08/23 Вск 09:52:34 2795707 812
>>2795706
речь вообще не про минимал апи
соурс генератор должен на что-то опираться для генерации вызовов хедлеров контроллеров и генерации биндеров для них.

самое банальное - навесить аттрибут (собственно они и есть)
подход "ты поищи по исходникам вызовы Add нужной сигнатуры у нужных типов и на основе их генерь" даже не знаю возможен ли, но точно нерентабелен.
Аноним 06/08/23 Вск 10:08:47 2795710 813
Аноним 06/08/23 Вск 10:23:22 2795715 814
>>2795710
это все равно упирается в "найди все вызовы MapX в коде, где бы они не были"

А вообще я не делаю особой разницы между рефлексией в рантайме и тем же самым при написании соурс генератора. Разница то просто в виде рантайма - сама софтина работает или билдер. Все равно пиши код вида "найди мне вот это с этими типами/аттрибутами и сгенерь для него код/il"
Аноним 06/08/23 Вск 10:33:11 2795719 815
>>2795715
>Разница то просто в виде рантайма - сама софтина работает или билдер
Билд происходит один раз.
Разница в производительности и конкретно сколько времени занимает старт. Для веба, который сейчас повсеместно в контейнерах на каких-нибудь подах с хуй да нихуя cpu, это особенно важно. Сюда ещё идёт размер сборки, с рефлексией тримить очень сложно и опасно.
Аноним 06/08/23 Вск 10:44:19 2795722 816
>>2795719
>Билд происходит один раз.
как и генерация этого же самого в рантайме.
и по сравнению с тем сколько времени жрет EF на свой запуск это ничтожно.
Как тот же DI - где его соурсгенераторная версия? че майки ее не делают?

трим понятно, но это ж асп.нет. кто его триммит то.
Аноним 06/08/23 Вск 10:56:16 2795736 817
>>2795722
>и по сравнению с тем сколько времени жрет EF на свой запуск это ничтожно.
С пробуждением, для ef'а тоже пилят компайлед моделс.
>как и генерация этого же самого в рантайме.
Вот это всё накапливается и получается что время до обработки первого запроса в минутах исчисляется, это пиздец. Горизонтальное масштабирование хорошо работает только когда воркеры быстро стартуют
Аноним 06/08/23 Вск 11:02:52 2795744 818
>>2795736
>С пробуждением, для ef'а тоже пилят компайлед моделс.
я его не использую. я как увидел время запуска так охренел. оно неприлично огромное. Может для асп.нетов это и допустимо (какая разница сколько оно стартует) - для других проектов нет.

>время до обработки первого запроса в минутах исчисляется, это пиздец
и 99.99% этих минут составляет EF )))
Аноним 06/08/23 Вск 18:23:45 2796270 819
>>2795496
>Потому что - как ты себе это представляешь?
В бейсике такой проблемы нет. Как я себе это представляю? В наследнике появляются новые свойства. Как они будут уведомлять о своем изменении? Как? Делать перегрузку эвента? Затенять? Переопределять?

я НЕ представляю как может быть иначе. У меня рили горит сука нахуй. Мне нельзя вмешиваться в этот процесс, охуеть. Может и свойства заблокировать? Это же СОБЫТИЕ, оно имеет уведомительный характер. Я глубоко непонятно за каким хером ObservableCollection содержит protected событие PropertyChanged, которым сама не пользуется и другим не дает.

Я уже молчу про то, что компилятор благодаря "прекрасному" синтаксису шарпа не понимает, что происходит вызов события и раздает неуместные советы. Клянусь, вот эти вот "+-" ":" самое гнусное изобретение майкрософт.
Аноним 06/08/23 Вск 18:50:36 2796300 820
>>2796270
Хуже асинк войда ничего нет.
Аноним 06/08/23 Вск 18:52:13 2796306 821
>>2796300
Как иначе использовать async в обработчиках событий?
Аноним 06/08/23 Вск 19:00:54 2796328 822
БЕЙСИКА НЕ СУЩЕСТВУЕТ
Аноним 06/08/23 Вск 19:24:47 2796366 823
>>2796270
Опять ты со своим бейсиком рвёшься? Сиди на нём и всё будет по старому
Аноним 06/08/23 Вск 19:30:24 2796379 824
>>2796270
Бейсикоблядь, спокуху оформи.
Аноним 06/08/23 Вск 20:59:29 2796476 825
>>2796270
кто тебе не дает? специально для таких случаев есть PROTECTED методы вида OnCollectionChanged
и в ObservableCollection он даже virtual
Аноним 06/08/23 Вск 22:37:06 2796559 826
Шарписты, я стараюсь написать строчку, которая извлечёт один из элементов массива с конца Console.WriteLine (myArray[^2]);
Так вот. На вот это ^2, вижуал студио ругается и говорит, что такая шляпа прокатит только в C# 8. Я так понимаю, что C# 8 не доступен в бесплатной версии с сайта майков, так?
Аноним 06/08/23 Вск 22:59:14 2796585 827
>>2796559
myArray[myArray.Length - 1]

И никаких зумерских фич не надо.
Аноним 06/08/23 Вск 23:28:53 2796597 828
>>2796559
Всё доступно. У тебя в csproj выставляется версия как рантайма так и языка (можно использовать старый рантайм но включить фичи языка которые при компиляции только используются). Смотри что там и меняй. Актуалочка сейчас это net6.0 и net7.0
Аноним 06/08/23 Вск 23:29:14 2796599 829
>>2796270
Дурачок, у коллекции (нахуя от нее наследуешься кстати, шиз?) есть методы для подъема событий, специально для таких шизов как ты.
Аноним 07/08/23 Пнд 08:33:22 2796742 830
>>2796597
Можешь пошагово объяснить чаво и куды?
Аноним 07/08/23 Пнд 09:42:40 2796768 831
>>2796585
Мде? А если отчёт с конца списка нужен?
Аноним 07/08/23 Пнд 14:11:30 2797049 832
Аноним 07/08/23 Пнд 18:28:18 2797355 833
Лямбды это просто такой сокрашенный синтаксис или у них есть какое-то особое предназначение, которое без лямбд больше нельзя никак реализовать и для которого эти лямбды и придумали?
Аноним 07/08/23 Пнд 18:30:32 2797360 834
>>2797355
ну попробуй без них - на каждый чих заводи именованный метод, который нужно где то разместить. Или в классе разместить или прямо тут в методе (шарп это позволяет) - все равно это будет "где то там".
Аноним 07/08/23 Пнд 18:35:24 2797371 835
>>2797355
Да без любых высокоуровневых фич можно обойтись. Ты же не думаешь, что без лямбд язык перестаёт быть полным по Тьюрингу?
Аноним 07/08/23 Пнд 18:39:32 2797382 836
>>2797355
Лямбды охуенны, чел.
Аноним 07/08/23 Пнд 18:54:31 2797397 837
>>2797360
>>2797371
Ну то есть просто сокращенный синтаксис?
Аноним 07/08/23 Пнд 18:56:34 2797401 838
>>2797397
Не сокращенные, а безымянные функции создаваемые "на месте". жаль что с классами так нельзя как в котлине (анонимные классы совсем не то)
Аноним 07/08/23 Пнд 19:11:49 2797419 839
>>2796742
Он пиздит. Там пейвол.
Аноним 07/08/23 Пнд 19:17:15 2797425 840
>>2797401
Безымянная функция может что-нибудь такое чего не может обычная?
Аноним 07/08/23 Пнд 19:20:32 2797426 841
>>2797425
Лексическую область видимости захватывать умеют.
Аноним 07/08/23 Пнд 19:24:43 2797432 842
Аноним 07/08/23 Пнд 19:30:10 2797437 843
>>2797425
я ж написал - она может не иметь имя и быть создана "in place"

любые функции с именем должны
а) иметь имя
б) будут размещены не на месте использования, а где то в другом.
Аноним 07/08/23 Пнд 19:43:18 2797449 844
>>2797432
Да, потому что локальный метод это сорт лямды.
Аноним 07/08/23 Пнд 19:44:01 2797450 845
>>2797449
(хотя в некоторых случаях наоборот)
Аноним 07/08/23 Пнд 19:47:05 2797453 846
>>2797425
если тебе так сложно. то считай ее сахаром.
ничем она от обычного метода не отличается - ведь компилятор услужливо за тебя при компиляции даст ей имя и впишет в класс.
Аноним 07/08/23 Пнд 19:47:51 2797454 847
Похуй короче, сорта говна.
Аноним 07/08/23 Пнд 20:09:32 2797470 848
>>2797437
Лол. Я точно также могу тебе расписать чем
i += 10 отличается от i = i + 10
а) не нужно второй раз писать i
б) знак + находится рядом со знаком = и его не нужно искать где-то в другом месте после имени переменной

И чо, давай тогда += называть какой-нибудь сигмой.
Аноним 07/08/23 Пнд 20:18:15 2797480 849
С чего начать?
> Прежде чем пытаться написатьICanvasImageInteropреализацию, рекомендуется хорошо понимать D2D, Win2D, COM, WinRT и C++.
Аноним 07/08/23 Пнд 20:18:30 2797481 850
>>2797470
спросили я ответил
если чел САМ НЕ ВИДИТ отличий от обычной функции и не может понять зачем в язык ввели лямбды (даже в богомерзкую жаву), и начинает искать скрытый смысл, то я ему и указываю на суть.

каждая фича сахар или нет имеет смысл зачем ее вводили и свое название.

>i += 10 отличается от i = i + 10
>а) не нужно второй раз писать i
и да. именно этим оно и отличается. и это его суть. и именно для этого оно и было введено

>давай тогда += называть какой-нибудь сигмой
а почему нет. оно также имеет собственное название - addition assignment
Аноним 07/08/23 Пнд 20:23:49 2797485 851
>>2797480
Начать с другого треда.
Аноним 07/08/23 Пнд 20:29:31 2797490 852
>>2797485
Я же на шарпе пишу...
Аноним 07/08/23 Пнд 20:37:22 2797495 853
Поясните за такой момент. Студия помогает мне инициализировать свойство в конструкторе, при этом свойство это расширенное (допустим string MyProperty), которое задает\берет значение из приватного поля string myProperty.

Собственно в конструкторе происходит следующее

public MyClass(string myProperty)
{
. . . MyProperty = myProperty;
}

При этом возникает предупреждение, что поле string myProperty не допускает значение NULL. Для этого я должен сделать вот так

public MyClass(string myProperty)
{
. . . this.myProperty= myProperty;
}

Почему студия упорно предлагает назначить значение публичному свойству, а не приватному полю и кто из нас прав? Если виноват я, то как поступить лучше?

Допустим в свойстве есть какая нидудь логика, и нужно инициализировать значение именно через него, но как сделать по красоте, чтобы студия не ругалась? Без подавления предупреждений.
Аноним 07/08/23 Пнд 20:41:14 2797498 854
>>2797495
не делает она этого
Аноним 07/08/23 Пнд 21:08:16 2797515 855
>>2797495
Вот так сделай:
private string myProperty = string.Empty;

Или если оно может быть null:
private string? myProperty;
Аноним 07/08/23 Пнд 21:25:44 2797524 856
2023-08-0721-22[...].png 35Кб, 1126x560
1126x560
>>2797498
Вот пикрил.
Самое интересное, что если имена не совпадают, то предлагает на выбор назначить полю или свойству.

>>2797515
>private string myProperty = string.Empty;
Но это же лишнее действие.

>Или если оно может быть null:
Не может т.к. в конструкторе запрашивается. По идее назначив non nullable стринг свойству, поле в принципе никак не может быть null, но студия просто тупорылая как утюг.
Аноним 07/08/23 Пнд 21:30:28 2797527 857
>>2797490
Теперь ты пишешь на C++.
Аноним 07/08/23 Пнд 21:32:10 2797529 858
>>2797524
Это должно решаться проверкой value в сетере на нал. Но кумпилятор не умеет это регистрировать. Костыль.
Аноним 07/08/23 Пнд 21:39:12 2797533 859
>>2797524
ну так ты сеттер сделал. сеттер на то и сеттер что сеттит. Это правильное предложение - щас сеттер пустой, потом нет, а значит разумнее делать через сеттер в общем случае. Ну а если разраб такой "мне виднее" - ну пусть сам и делает

с другой стороны, решарпер предложит инит приватного.
Аноним 08/08/23 Втр 01:28:24 2797746 860
>>2796559
> только в C# 8
В смысле? Восьмая версия шарпа вышла 4 года назад.
Аноним 08/08/23 Втр 01:33:17 2797749 861
>>2797746
Значит, прошло 4 года, а восьмой шарп можно только купить?
Аноним 08/08/23 Втр 04:25:38 2797826 862
>>2797749
Да. Нужно заплатить на курсах 100 тыс миллионов чтобы они научили как скачать сдк.
Все прошли через это
Аноним 08/08/23 Втр 11:07:46 2797972 863
>>2797826
> Нужно заплатить
Но из России этого сделать нельзя!
Аноним 08/08/23 Втр 14:55:40 2798306 864
>>2797972
это можно сделать везде. можешь хоть мне купить остров в океане, а я тебя научу гуглить.
Аноним 08/08/23 Втр 17:40:25 2798496 865
Надеюсь тут есть те, кто недавно смог вкатиться в джуны на аспах. Умоляю, поделитесь историей успеха. Как оформляли резюме и часто ли приходили приглашения?

В своём резюме вкратце описал основные инструменты в виде наброса ключевых слов, с которыми приходилось работать (аспы, мвс и рестапи, постгрес, немного тайпскрипт и ангулар), чутка описал чё вообще хочу (а-ля "интересна сфера бэкенд-разработки, хочу развиваться как специалист эмням пук"), ну и ссылка на гит с парой своих серверных проектов. Сам живу в дс2 и тотально охуеваю с того, что в таком крупном городе вакансий нихуя нет. Вбрасывают штуки две-три за неделю без указания требований к опыту в описании, откликаешься на них, и получаешь тотальный игнор. Уж лучше бы отказали бля, потому что так угнетает жить без каких-либо ответов.
Откликаться на то, где прямо в описании пишут требования к опыту, тоже результатов не приносит — сразу же отказывают (ну хоть не игнорят).

Один раз таки дали тестовое и по его результатам пригласили на собес. Спрашивали довольно дефолтную хуйню по типу "принципы ооп", "ссылочные и значимые типы", "как реализовать проверку правильной расстановки скобок", "как работает словарь" и тд. Имхо отвечал довольно норм, хоть и местами с затупами, что даже пригласили на второй этап, где... ебали голову на тему "почему ты поступил на программиста". Ответ что "просто потому что на интерес решил попрогать, зашло смотреть на то, как код, с которым долго ебался, наконец работает как надо, ну и всё заверьте..." их не устроил и позже мне прислали отказ.

Полагаю, проблема в целом в моём резюме, раз за пару месяцев мне ответили с приглашением только одна компания. Так что подскажите, анончики-джуны, как вы сваяли своё резюме так, что оно привлекло хоть какое-то внимание, и какими пет-проектами щеголяли?
Аноним 08/08/23 Втр 20:57:07 2798797 866
.png 10Кб, 859x392
859x392
.png 84Кб, 1605x563
1605x563
.png 45Кб, 1463x540
1463x540
>>2796559
1. Проверяешь какие SDK у тебя есть(первый скрин). 8 шарп появился в 3 вроде(уже не помню)
2. Открываешь файл проекта (ConsoleApp.csproj) любым текстовым редактором или студией.
3. Смотришь что в TargetFramework и LangVersion. Если фреймворк - 3 и выше - у тебя все должно работать.
4. Если нет - идешь в гугл и ищешь "DOTNET SDK DOWNLOAD FREE WITHOUT REGISTRATION AND SMS NO VIRUS FOR DEVELOPERS"
5. Переходишь по первым ссылкам, если видишь что-то похожее на третий прикриплейд и скачиваешь
6. Идешь в настройки проекта и устанавливаешь версию фреймворка 6 или 7 в зависимости от той что скачал и версию языка - latest
7. Пользуешься ренджами
Аноним 08/08/23 Втр 21:10:43 2798814 867
>>2798797
Зря старался, чувак. Тот чел все равно нихуя не поймет.
Аноним 08/08/23 Втр 21:32:00 2798837 868
>>2798814
Я просто практикуюсь. А то немного надоело что отдел сопровождения ругается, что недостаточно подробно инструкции по развертыванию и эксплуатации пишу
Аноним 08/08/23 Втр 21:40:47 2798851 869
.png 97Кб, 767x824
767x824
>>2797355
Это не то чтобы синтаксический сахар. Потому что если так рассуждать - все конструкции любого языка - синтаксический сахар.
Тебе никто не мешает без циклов, вызовов и прочего писать на голом ассемблере. Просто последовательно:

start:
mov rax 1
add rbx rax
cmp rbx 10
JNE start
...

А все эти циклы и прочее - сахар получается. Все в принципе можно вот так написать.

Ну а конкретно про лямбды. Без них - ты бы писал кучу однотипного кода на каждый чих. В джава, допустим - довольно долго так вот и приходилось жить. Можно ли так жить? Можно. Хорошо ли тратить свое рабочее время на написание однотипного кода, который можно написать лямбдой - я хз.
Аноним 08/08/23 Втр 21:47:26 2798856 870
>>2798851
Блин. Да. Нафиг я выдумал бизнес-задачу, и при этом не реализовал ее решение.
Пока вспоминал как там в ассемблере условные джампы делаются - забыл про то что надо день рождения учесть. Лалка просто.
Аноним 08/08/23 Втр 21:51:12 2798860 871
>>2798856
В отделе сопровождения не брешут. Тебе есть куда расти, чувак...
Аноним 08/08/23 Втр 21:55:13 2798864 872
>>2798860
Я знаю((( Но блин. Вот конкретно инструкции и документация. Ну блин. Аааааа. Все ж и так понятно. Положил docker-compose, docker-compose up -d, все. Дальше - методом тыка - разбирайся с программулиной. Преврати это в игру! Не. Не хотим. Хотим чтобы была инструкция че и как сделать, где скачать, какие галки поставить. Ууууу. Уууу!
Аноним 08/08/23 Втр 22:00:34 2798871 873
>>2798864
да да, докер на винде. ага.
от одного размера образа сердце прихватит
Аноним 08/08/23 Втр 22:06:13 2798877 874
>>2798871
Так в сопровождении - просто надо уже готовые образы развернуть из своего реестра.
А я постарался, что конечные образы 75-80 метров, так что прям страшно быть не должно.
Аноним 08/08/23 Втр 22:13:08 2798890 875
>>2798877
и что с ними под виндой делать?
Аноним 08/08/23 Втр 22:27:17 2798914 876
>>2798890
Как минимум - под виндой нужон докер при разработке. Ставить сбоку виртуалку - такое себе. А за дуалбут на рабочем ПК тебе ИБ вломит.
Ну и к моему удивлению - куча клиентов имеют WinServer и не хотят с него слазить. А без докера - разворачивать 100500 сервисов та еще боль и для сопровождения и для разраба когда его привлекают, и потом для клиента.
Аноним 08/08/23 Втр 23:01:52 2798965 877
456456452.jpg 167Кб, 1280x720
1280x720
>>2798814
>>2798797
Я на самом деле нихуя не понял, но всё равно спасибо.
Аноним 08/08/23 Втр 23:29:22 2798997 878
>>2798914
я клиент. у меня винда. я попросил инструкцию по развертыванию софта. А мне "вот тебе докер образ", который непонятно как ставить на винду (давно докер под винду появился а????), да еще этот образ содержит в себе еще одну винду.
Аноним 09/08/23 Срд 00:23:04 2799071 879
>>2798997
> давно докер под винду появился а????
Давненько. Есть даже чисто виндовые имэджи
Аноним 09/08/23 Срд 03:21:01 2799173 880
>>2799071
ага. это тот который использует hyper-v, включение которого ломает виртуалбокс.
уносите.

А размер виндовых имаджей я как то видел. И охренел.
Может чего изменилось ведь докерхаб услужливо не показывает размеры, но чет сомневаюсь я. Это ж винда. Она даже тини весит епрст.
Аноним 09/08/23 Срд 03:27:23 2799176 881
>>2799173
Вопрос стоял в возможности а не в целесообразности.
Так то нахуй надо докер в винде держать если давно всл2 работает ещё и с гпу
Аноним 09/08/23 Срд 04:11:59 2799181 882
>>2799176
Ты ещё скажи, что нет смысла ставить докер на сервер с линуксом.
Аноним 09/08/23 Срд 12:19:51 2799424 883
>>2740238 (OP)
Шарпаны, подскажите можно ли в xUnit сообразить такой тест, который будет проверять используется ли в сборке какой-либо метод или свойство определенного класса?
Например я хочу, чтобы в сервисе нигде не использовалось свойство DateTime.Now. И хочу чтобы тест это проверял. Это реально?
Аноним 09/08/23 Срд 18:21:39 2799881 884
Скомпилил я ваш шарп "в один бинарник", мало того что все равно в один бинарь не собрался (там еще какие-то dll рядом положил), так еще моя утилитка весит больше 150мб. Такое себе для каждой утилитки.
Это, конечно, звездец рантаймище, нахер оно вообще надо все, когда есть современные кросс-компилируемые языки как го, а теперь уже и раст с нормальным дизайном синтаксиса и еще без ГЦ и рантайма вообще?
Аноним 09/08/23 Срд 18:24:40 2799886 885
>>2799881
ну так пиши на го, какие проблемы )
если у тебя клиентура из тех "низашонипоставимрайнтайм, жаву можна, питон можна, а шарп нееееетьььььь" то можно тебя только пожалеть

можно было бы посоветовать еще триммить, но лучше пожалеть.
Аноним 09/08/23 Срд 18:25:47 2799887 886
>>2799881
Шарп вообще никогда не был предназнчен для написания "утилиток". Сборка в один бинарник нужна исключительно для облегчения развёртывания бэкенда.
Аноним 09/08/23 Срд 18:29:59 2799897 887
>>2799887
ну это не совсем так. те же дотнет-тулз
просто тут начинается смешное (особенно от жавистов) - "ой ой нужно еще рантайм ставить", как будто лол рантайм жавы не нужно ставить.
Аноним 09/08/23 Срд 18:33:14 2799907 888
>>2799897
Сдаётся мне, это не джависты, а бывшие крестоёбы.
Аноним 09/08/23 Срд 18:35:51 2799918 889
>>2799424
1. Xunit не при делах
2. Ты можешь вычитывать il байткод сборки и искать там использование того что тебя интересует
Аноним 09/08/23 Срд 18:39:31 2799933 890
>>2799881
Пиздишь косой. Там много настроек деплоя в том числе и прям вот одним файлом

Сорт оф пруф
<PropertyGroup Condition="'$(Configuration)' == 'SingleFileRelease'">
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<PublishTrimmed>false</PublishTrimmed>
<PublishReadyToRun>true</PublishReadyToRun>
<IncludeAllContentForSelfExtract>false</IncludeAllContentForSelfExtract>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
Аноним 09/08/23 Срд 18:43:02 2799942 891
>>2799933
ну технически когда софтина распакоываеся в темп и оттуда запускается - хрень
также тримминг та еще "радость".
Аноним 09/08/23 Срд 18:48:33 2799955 892
>>2799942
В принципе анпак будет только один раз на версию происходить. Синглфайл же для удобства доставки нужен как правило так что под пивко сойдёт
Аноним 09/08/23 Срд 18:56:17 2799973 893
>>2799955
Т.е. можно обойтись install_wizard.msi
Аноним 09/08/23 Срд 19:01:01 2799990 894
>>2799973
Под линь тоже предлагаешь собирать пакет под каждый менеджер?
Тебя извратила винда. Окстись. Инсталлеры для портэйбл софта это зло
Аноним 09/08/23 Срд 19:03:36 2800004 895
>>2799990
На линуксе вместо инсталлеров надо собирать винда-стайл снапы.
Аноним 09/08/23 Срд 19:26:58 2800074 896
.png 4Кб, 650x125
650x125
>>2799881
Зочем ты обманываешь?
Аноним 09/08/23 Срд 19:38:03 2800089 897
>>2800074
ммм, а что это приложение делает кроме НИЧЕГО?
и для НИЧЕГО ей конечно же НИЧЕГО и не нужно того, что может дуть файл.
Аноним 09/08/23 Срд 19:40:19 2800093 898
>>2800074
Эх, вот бы pdb упаковать в exe.
Аноним 09/08/23 Срд 19:43:21 2800097 899
Аноним 09/08/23 Срд 19:44:52 2800099 900
>>2800089
Как бы прикол в том что он собирал сингл без рантайма а не только и не сколько потому что проект пустой
Аноним 09/08/23 Срд 19:53:11 2800106 901
>>2800089
Конкретно это - да, ничего особого не делает.
На работе - у меня выводок примерно из 50 микросервисов. Самый дутый(сервис авторизации, с кучей интеграция, OAuth и прочими входами ключем с флешки) - ~28МБ и в нем примено 90к строr кода. Я не понимаю, что там за утилитка такая, что 150МБ тянет за собой.
>>2800099
>>2800099
Публиковал этим
dotnet publish -c Release -a x86 --os win --self-contained

Рантайм, если верить документации - лежит тама.
Аноним 09/08/23 Срд 20:14:21 2800125 902
кто скажет почему LINQ вида

var elems = items.Select(m => (string)null).ToArray()

выдает результат string?[]. С чего вдруг массив результат стал сам нуллабле?
Аноним 09/08/23 Срд 21:06:19 2800194 903
image.png 14Кб, 256x110
256x110
>>2800125
За такие тупые финты тебя компилер ещё и унижать CS8600 должен
Аноним 09/08/23 Срд 21:09:48 2800199 904
>>2800194
этот финт для примера. в реальном коде в Select что-то возвращающее нулабле
Аноним 09/08/23 Срд 21:11:50 2800201 905
>>2800199
Тебе не через каст нужно снимать наллабл у референс типов а через !
Аноним 09/08/23 Срд 21:18:00 2800206 906
Хм.
Хм.

Анон. А чем вы засеиваете БД?

Просто я чет сначала начал CSV использовать. Пока было мало сущностей связных таблиц - было норм.
Но потом - всякие связи там. Для сложных сущностей - надо в нескольких CSV связать. И все такое. Решил XML. Но с XML - чет многовато дублирующего кода будто выходит. А просто сериализовать то что в XML к тому что в БД - тоже не удобно, потому что тогда надо все ID и все это проставить, а хотелось бы чтобы XML руками мог правиться по необходимости.

В общем. Как нормальные люди засеивают базу, когда 50+ таблиц и есть штук 5 таблиц с довольно сложными сущностями?
Аноним 09/08/23 Срд 21:19:51 2800207 907
>>2800201
блин опечатался
результат string[]?

то есть нулл в массиве это норма, а значит никакой ! мне не нужен

ок, с array хер поймешь. С ToList() понятнее
результат List<string>?

почему?
как и когда результат этого LINQ даже в теории может быть null?
Аноним 09/08/23 Срд 21:34:39 2800215 908
>>2800125
Что ты хочешь получить вообще в elems? Мне кажется, что есть способы сделать это правильнее, но надо понять зачем тебе это вообще надо
Аноним 09/08/23 Срд 21:37:47 2800221 909
>>2800215
способов миллион, но почему LINQ неправильно выводит тип

var elems = matches.Select(m => MakeSomeNullable(m)) .Where(t => t != null).Distinct().ToList();

в результате должен быть список не-нуллов, да пофиг даже если список нуллаблов. но тут у нас сам список нуллабле, что ШТА????
Аноним 09/08/23 Срд 21:43:36 2800234 910
>>2800215
я решил через OfType<> который собственно фильтрует нуллы, но все равно непонятно что за херь показывает студия в подсказке
Аноним 09/08/23 Срд 21:56:01 2800252 911
>>2800234
Так объясни какая твоя цель. Что такое matches? List<string>? Что ты с ними хочешь сделать? Чтобы все были null?
То, что ты написал изначально:
var elems = items.Select(m => (string)null).ToArray()
и есть решение, оно не будет null, это всегда будет string[], потому что:
ToArray() - An array that contains the elements from the input sequence.
Аноним 09/08/23 Срд 22:13:03 2800269 912
изображение.png 7Кб, 435x97
435x97
>>2800252
да неважно что такое матчес. просто список чего то, все равно потом в нулл превращается

видишь пик? видишь 2 знака вопроса. Почему их 2? потому что студия написана рукожопами.
Аноним 09/08/23 Срд 23:37:16 2800327 913
>>2798496
Что-то тебя даже тут заигнорили. Знакомый вкатился недавно. Откликался долго, вкатился на, кажется, 65к. Он уже думал опыт накрутить, но не пришлось
Парень действительно толковый. Он заграницей, откликался на удаленные вакансии в России.
Аноним 09/08/23 Срд 23:40:13 2800328 914
>>2800206
Хз, мне кажется, проще прямо в миграции захардкодить сущности, которые ты хочешь посеять
Но я особо этим не занимался, у меня простые случаи. Зато не надо лезть в файлики, смотреть, что же там такое.
Аноним 09/08/23 Срд 23:57:55 2800341 915
>>2799933
Лол, наркомания, а письмо билу не надо еще написать, раз такие портянки приходиться писать?
В общем, опять мягкие обвели меня вокруг пальца, как дешевку.
Пускай свое интерпретируемое чудо сами жрут.
Аноним 10/08/23 Чтв 00:00:48 2800348 916
>>2800341
Полностью согласен. Без тебя всем будет лучше
Аноним 10/08/23 Чтв 00:01:19 2800349 917
>>2800341
иди в го, иди в раст
там портянки будешь в коде писать.
никаких проблем
Аноним 10/08/23 Чтв 00:02:23 2800350 918
>>2800206
>есть штук 5 таблиц с довольно сложными сущностями?
Сидируй прямо из excel-я. Сделай xlsx файлик (или еще какой открытого формата), распиши там все данные в связанных таблицах
и дергай данные при сборке контекста прямо оттуда.
Аноним 10/08/23 Чтв 00:05:50 2800353 919
>>2800328
>Хз, мне кажется, проще прямо в миграции захардкодить сущности, которые ты хочешь посеять
Хуевая придумка. Гораздо проще в табличке вроде csv посмотреть, чем лопатить кучу миграции где все будет выглядеть как жопа.
Аноним 10/08/23 Чтв 00:10:29 2800358 920
>>2800349
В го может да, а в расте почему портянки?
Всегда думал что больше бойлерплейт приходится на полу-пустые классы в ООП.
Аноним 10/08/23 Чтв 00:36:24 2800363 921
>>2798496
>В своём резюме вкратце описал основные инструменты в виде наброса ключевых слов, с которыми приходилось работать (аспы, мвс и рестапи, постгрес, немного тайпскрипт и ангулар),
Ко всему этому нужно описание опыта работы. Где работал или в каких проектах участвовал, какой срок, в какой роли, какие задачи выполнял, какие технологии/инструменты использовал. И так для каждого проекта/места работы.
>>2798496
>чутка описал чё вообще хочу (а-ля "интересна сфера бэкенд-разработки, хочу развиваться как специалист эмням пук"),
Всем похуй чего ты хочешь.
>>2798496
>ну и ссылка на гит с парой своих серверных проектов.
Чтобы кто-то заглянул в твой гитхаб, резюме должно сначала пройти первичный фильтр в виде HR. А потом еще заинтересовать того кто будет проводить собес, тогда он может быть и заглянет туда. Это если он твое резюме не перед самым собесом получит и вообще успеет его хотя бы просто проглядеть.
Аноним 10/08/23 Чтв 11:09:32 2800544 922
image.png 5Кб, 469x249
469x249
>>2800269
A теперь смотри прикол.
Аноним 10/08/23 Чтв 11:12:52 2800547 923
string?[] - это сам массив нуллабл, или он из нуллабл строк?
Аноним 10/08/23 Чтв 11:15:38 2800551 924
Ну всё, теперь я знаю о string?[]?
Аноним 10/08/23 Чтв 11:58:50 2800575 925
>>2800358
>а в расте почему портянки?
чем меньше в языке сахара, гибкости и "сделаю за тебя", а также готовых либотек удобных, тем больше все ручками. Тот же код из питона при переносе на шарп будет более громоздкий.

>>2800544
а я и говорю - разрабы студии РУКОЖОПЫ. как и разрабы шарпа.
Аноним 10/08/23 Чтв 12:20:47 2800593 926
>>2800575
Сахар нужен, чтобы скрыть бойлерплейт.
Бойлерплейт в расте скрывается через код ген макросов.
Скажем одной строчкой можно превратить, скажем main в асинхронную main (и все это компильтайм), в других языках приходится городить новый синтаксис.

Сахар это сложность, вот добавили тебе первичный конструктор, но чтобы эта шляпа работала, тонну ограничений внесли. Так что нашел чем гордиться.
Аноним 10/08/23 Чтв 12:35:25 2800609 927
image 8Кб, 446x98
446x98
image 9Кб, 553x115
553x115
image 9Кб, 436x171
436x171
>>2800575
студия тут не причём
так показываются ссылочные типы-не дженерики
ты можешь написать string? str = ""; и тебе точно так же подсветит что он nullable, хотя очевидно что в данный момент нет, но этой переменной ты потом можешь присвоить null, а к string без ! уже нет
Аноним 10/08/23 Чтв 12:59:59 2800633 928
>>2800593
это все бла бла. попробуй портировать софт и сравнишь.
Аноним 10/08/23 Чтв 13:00:12 2800634 929
>>2800206
sql скрипты которые генерят/либо в них прописан xml из которого заполняются таблицы
Аноним 10/08/23 Чтв 14:37:20 2800741 930
image.png 673Кб, 712x818
712x818
Есть ли смысл в новом, изготовленном с нуля приложении, использовать WPF, если Windows Forms хорошо справляется с задачей в целом меня устраивает?
Аноним 10/08/23 Чтв 14:44:04 2800747 931
С SignalR в Core есть кто работал?
Как в нем через хаб обернутый в IHubContext<MyHub> вещать не всем подряд а конкретному соединению/пользователю?
Аноним 10/08/23 Чтв 15:21:11 2800802 932
>>2800747
> конкретному соединению/пользователю
Никак. Я для этого оч оч сложный код писал, который внутри себя распределял коннекты и строил сложые дикшинари
Аноним 10/08/23 Чтв 16:11:50 2800931 933
>>2800609
понял.
студия считает любую переменную нуллабле ведь туда можно присвоить нулл
А val в шарпе нет

Привык я, что в котлине сразу все нормально сделали и var/val и нулабилити (в том числе lateinit - где он там в шарпе? чем закончилось? просто ! ну ну)
Аноним 10/08/23 Чтв 16:13:27 2800939 934
>>2800741
Если тебя не смущает, что аналоги формсов потяжее в плане производительности, то всегда есть смысл использовать что то другое вместо формсов, если твое приложение не пара кнопок.

Впрочем даже если так то зачем вообще помнить формсы
Аноним 10/08/23 Чтв 16:16:22 2800949 935
>>2800939
А чего их помнить-то, они ж простые как палка. Это зумерские WTF надо учить по полгода.
Аноним 10/08/23 Чтв 16:26:14 2800971 936
>>2800949
> зумерские WTF
Чувак, ты хоть видел сколько лет WTF? Я бы понял, если бы ты сказал "зумерское MaUI", но зумерское WTF это lil
Аноним 10/08/23 Чтв 16:27:09 2800976 937
>>2800949
ну это если писать говнокод. я когда на формсах писал, то использовал и их убогие биндинг и MVP юзал
щас там еще какие то биндинги аля MVVM подвезли, но это уже пусть любители простоты разбираются.
А мне и в WPF хорошо.

Сам подход "что-то случилось и я бегаю кодирую что обновлять в контролах" (говнокод или даже MVP в формсах) проигрывает подходу "есть стейт. за стейтом следят кому нужно и обновляются" (MVVM, MVI)

А уже вытягивание из контрола "мне нужно значение вон того элемента" или "обновить вооон тот элемент в дереве/списке" привьет любовь к биндингам быстро.

но вообще мне больше всего нравится подход jetpack compose/swift combine/flutter. Еще наверное maui че то там обещал, но результатов не знаю. свифт, дарт, шарп БЕДНЫ на выразительные средства и потому любой контрол суть класса. а вот котлин - чистая выразительная мощь и потому там все есть функция.

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

И если хочется раздробить большое описание, то не нужно делать кучу файлов с разметкой как в том же WPF, где ты просто вынужден делать либо "одна большая портянка" либо "куча файлов на которую ты эту портянку раздробил"
Аноним 10/08/23 Чтв 18:03:06 2801130 938
>>2800741
С нуля - WPF сложнее.
Про сторонние решения - пиздеж. Куча штук есть которые ТОЛЬКО для форм. А ВПФ - по остаточному принципу.
У ВПФ проблемы со шрифтами.
Из плюсов ВПФ - он заставляет тебя не говнокодить. Но не говнокодить - ты можешь и на формах. Тот же MVVM вполне себе можно с формами юзать при желании, никто не запрещает.

С формами как раз минус в том, что он слишком много позволяет тебе. В результате многие разрабы - решают там срезать угол, тут срезать, получают какаху, и ругают формы.

Но. Я не то чтобы ругаю ВПФ. ВПФ, особенно если в команде больше 1 человека - позволяет упростить жизнь, т.к. уже сказал - он заставляет более-менее разделять ответственность, в результате - один чел может заниматься чисто ДИЗАЙНОМ, второй логикой и всем этим вот.
Аноним 10/08/23 Чтв 18:04:59 2801135 939
>>2800747
Каждому соединению создаешь группу и вещаешь в эту группу.
Это наиболее простое решение и именно так майки сами в своих примерах по работе с SignalR показывают что надо делать.
Аноним 10/08/23 Чтв 18:05:14 2801137 940
>>2801130
> У ВПФ проблемы со шрифтами.
Это какие?
Аноним 10/08/23 Чтв 18:10:10 2801146 941
Аноним 10/08/23 Чтв 18:30:09 2801174 942
Спа
Кто перекатывался из других языков, насколько тяжело дался процесс? Насколько просели по ЗП в сумме и по времени?
Аноним 10/08/23 Чтв 18:32:17 2801178 943
>>2800741
Пятый пункт - пиздежь...
Аноним 10/08/23 Чтв 18:37:16 2801181 944
>>2800747
await HubContext.Clients.Client(client.Id).SendAsync("MethodName", arg1);
Аноним 10/08/23 Чтв 18:51:04 2801198 945
>>2801174
Перекатывался из плюсов.
Заняло буквально 2 вечера чтобы разобраться с дотнетом, 2 собеса чтобы получить первый оффер.
ЗП на старте - просела на 40% примерно. Но через полгода - уже нагнал.
Аноним 10/08/23 Чтв 20:33:30 2801356 946
>>2801146
Да. но это лечится.
На авалонии не лечится

И впф не заставляет не говнокодить
Можно писать в стиле формсов

Он дает возможность отделить логику вида от самого вида. Ну и не заниматься ручным рисованием
И всё
Аноним 10/08/23 Чтв 21:47:30 2801483 947
>>2800633
Портировать софт откуда? Ты о чем вообще? Обострение шизы?
Аноним 10/08/23 Чтв 22:29:34 2801508 948
>>2801483
С другого языка. Сложно сравнивать разное, а вот порт отлично показывает как одно и то же делается в разных языках.

А без этого все сравнения бла бла ни о чем. Сишник тебе скажет что ему си норм, пхпшник скажет то же самое. Каждый кулик...
Аноним 10/08/23 Чтв 22:32:25 2801512 949
>>2801356
>Ну и не заниматься ручным рисованием
А если очень надо, то можно? Давненько было, но помню сходу у меня не вышло порисовать и я доделал лабу на формах
Аноним 10/08/23 Чтв 22:47:44 2801525 950
>>2801512
Я про кастомный вид контролов. Я не про треугольные кнопки, но иногда нужно что-то свое.
Аноним 10/08/23 Чтв 23:08:10 2801548 951
Аноним 10/08/23 Чтв 23:12:56 2801555 952
>>2801548
Хорошо что никто тут не пишет тесты
Аноним 11/08/23 Птн 00:35:23 2801617 953
>>2801548
Выглядит что чел в попытках потешить чсв просто всё заруинил а теперь пытается судорожно всех убедить что итс прэнк бро, сорсес ис эвэйлабл он гитхубе энд айм схаре онли хэш оф юр емейле
Аноним 11/08/23 Птн 00:40:06 2801619 954
>>2801617
Хотя я ошибся. Он просто хочет денег и не хочет что бы кто то мог убрать эту хуету. Прям как в f2p играх
Аноним 11/08/23 Птн 00:41:01 2801620 955
>>2801174
зависит от твоего опыта. Я в течение 1-2 лет перекатился, и всё это время работал.
Аноним 11/08/23 Птн 00:46:11 2801623 956
>>2801548
надеюсь пизда ему, а то соя может и пощадить
Аноним 11/08/23 Птн 01:56:25 2801665 957
>>2801623
Предлагаешь колени ему сломать?
Аноним 11/08/23 Птн 03:05:54 2801670 958
>>2801623
А ему и так пизда.
Большинство и так уже спрыгнуло с его библиотеки.
Если кто-то и донатил, то теперь точно не будет.
Ну и жирная метка "но хаир" в резюме. "Вы автор библиотеки moq? А так это вы тот мудак из-за которого мы потратили миллионы баксов из-за того, что пришлось по быстрому выпиливать ваше говно из наших проектов""
Аноним 11/08/23 Птн 03:08:51 2801671 959
>>2801665
Заставит писать на джаве.
Аноним 11/08/23 Птн 07:25:55 2801704 960
Смотрите.
Есть интерфейса:

IDeviceReader

С методом Task<Data> ReadData(CancellationToken ct);


Тот кто его имплементировал - сделал все синхронно.

В результате - из-за ошибки имплементации - иногда "зависает" выполнение метода ReadData, если просто устройство в процессе чтения - отключить.

Собственно. Проблема в том, что я не могу таким макаром отменить чтение получается. Там даже без зависаний - CancellationToken никак не обрабатывается.

Раньше бы я просто чтение выполнял в отдельных потоках и в такой вот ситуации сделал Thread.Abort()

А как делать теперь? Я не понимаю. Просто висит зависший кусок кода. Висит пока не рестартанешь приложение. Попытки обернуть синхронную задачу в асинхронную и уже ее отменить - ни к чему не приводят. Попытки извращаться с Task.WhenAny(reader.ReadData, Task.Delay(timout)) - тоже нихуя не делают пока не завершится чтение.

Я в тупике. А разраб который имплементировал это все дело - в упор не хочет нормально сделать, придумывая миллион хуйни и отшучиваясь, а уже месяц сделать не может, ну а забрать и сделать нормально - мне не разрешают, говорят что его задача - пусть он и делает, а у тебя есть свои.
Аноним 11/08/23 Птн 08:19:26 2801713 961
>>2801704
> Попытки извращаться с Task.WhenAny
почему? как так? это невозможно
Аноним 11/08/23 Птн 09:54:46 2801764 962
>>2801704
>Я в тупике. А разраб который имплементировал это все дело - в упор не хочет нормально сделать, придумывая миллион хуйни и отшучиваясь, а уже месяц сделать не может, ну а забрать и сделать нормально - мне не разрешают, говорят что его задача - пусть он и делает, а у тебя есть свои.
Значит проблема не техническая, а организационная. Создаешь подзадачу на этого чела по исправлению косяка, помечаешь её как блокер своей и занимаешься чем-нибудь другим.
Аноним 11/08/23 Птн 10:16:42 2801780 963
>>2801704
ничего ты не сделаешь. Если ты не можешь по таймауту закрыть сокет или что то такое, что сразу прекратит работу этого зависшего кода и выдаст исключение, то труба.
Аноним 11/08/23 Птн 10:40:45 2801807 964
>>2740238 (OP)
Кто-нибуть юзает шифрование данных в бд в своем проекте?
Сейчас использую шифрование на уровне приложения, то есть любая операция с данными с базы/в базу у меня идет encrypt/decrypt.
Вопрос можно ли это сделать как-то нативно на уровне самого mssql и настроить ef?
Какие подводные?
Сейчас читаю про TDE, но до ef'а еще не дошел.
Аноним 11/08/23 Птн 11:13:41 2801850 965
>>2801807
Можно, но не нужно.
Если тебе понадобится потом БД сменить (а MSSQL тебе точно придется сменить) или поменять метод шифрования, то ты огребешь охуенных проблем и сам себя проклянешь.
Аноним 11/08/23 Птн 11:14:11 2801853 966
Я перефразирую вопрос:
Что по вашему лучше использовать: шифрование на уровне базы или приложения?
На уровне приложения как по мне более универсальный способ, т.к. можно без задней мысли подменять разные субд.
И еще - какой вариант лучше по производительности или особой разницы нету?
Аноним 11/08/23 Птн 11:16:56 2801856 967
>>2801850
Хорошо, спасибо, я в принципе так и подумал, буду просто хуярить на уровне маппера.
А почему мне нужно будет сменить mssql?
Аноним 11/08/23 Птн 11:50:28 2801880 968
>>2801856
>Хорошо, спасибо, я в принципе так и подумал, буду просто хуярить на уровне маппера.
>А почему мне нужно будет сменить mssql?
Примерно по той же причине по которой все когда-то спрыгнули с Oracle, ну и плюс современные обстоятельства.

>>2801853
>Что по вашему лучше использовать: шифрование на уровне базы или приложения?
На уровне приложения, т.к. во первых шифрование - это по сути перемалывание чисел и не является нормальной задачей для БД. Во вторых тогда между приложением и БД данные у тебя будут ходить в открытом виде. И какой тогда толк от твоего шифрования.
Аноним 11/08/23 Птн 11:55:48 2801884 969
humand-speaks-t[...].gif 7274Кб, 374x211
374x211
>>2801880
Вообще у меня пока бд крутится на одном хосте с приложением, но вообще ты прав анон, спасибо.
Аноним 11/08/23 Птн 12:03:49 2801889 970
>>2801880
> Во вторых тогда между приложением и БД данные у тебя будут ходить в открытом виде.
Если речь о канале то постгрес и мссукель могут в тлс
Аноним 11/08/23 Птн 16:39:21 2802314 971
>>2801704
Какой ответ ты ждёшь с максимально абстрактным IДывайсРыдэр.ВычитатьХуету? У тебя должен быть ивент на отключение девайса, в нём ты можешь закенселить токен, например.

Task<Data> ReadData(CancellationToken cancellationToken) {
var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);

huinyaDlyaRabotySDevicom.DeviceDisconnected += (_, _) / <-- жопа твоей жирной мамаши / => cts.Cancel();

дальше в методе используешь cts.Token, если всё синхронное, то придется проверять IsCancellationRequested или на каждый пук вызывать cts.Token.ThrowIfCancellationRequested
Аноним 11/08/23 Птн 17:55:18 2802444 972
>>2802314
нормальный у него вопрос. А вот твой ответ капитанский - юзай cancellationToken, люк

В этом то и проблема что код не юзает никакой из паттернов отмены и не отваливается по таймауту. И ранее такое можно было хотя бы прибить через Abort, а теперь ничего - плоди процессы.
Аноним 11/08/23 Птн 18:28:32 2802496 973
>>2802444
Вот и я о том же.
Пол дня на работе спрашивал у всех коллег, мож я тупой и чет пропустил и есть какой-то механизм отмены. Все чешут репу и про токены говорят, так блядь, чел игрорит их, че эти токены дадут-то?
А чел тот - в очередной раз - гнет лыбу, что сейчас-то он сделает нормально. Месяц уже гнет. Все считай встало, потому что ЗАВИСАЕТ. А вопросы - ко мне, типа ты же его обращаешься к его коду - отмени))). Офигеть. Думаю положу выполнение вот этих вот задач в отдельное приложение и из основного - буду убивать процессы если "зависло". Другого пути лично я не вижу сейчас(((
Аноним 11/08/23 Птн 18:31:55 2802499 974
>>2802496
> есть какой-то механизм отмены
Есть какой-то другой механизм отмены.


Вообще. Я не понимаю, как в 2023 году - сеньер может просто забивать на таски и асинхронщину. Вот что сложного-то?

Еще конечно решение - не давать ему самому создавать сокеты, а поменять нафиг апи, чтобы я сверху мог ебнуть сокет по таймауту. Просто в остальных случаях люди нормально сделали, а тут подключился СЕНЬЕР и просто лыбу гнет, и не делает(((
Аноним 11/08/23 Птн 19:02:40 2802543 975
>>2802499
Всё бывает. Вызов com, нативных либ написанные без знания о всяких ваших там токенов.
Может зависнуть или работать когда уже не нужно. Серьезная проблема и решение костыли если возможны.
Аноним 11/08/23 Птн 19:16:23 2802571 976
Я не понимаю это я уже ебнулся или мир?

в блазоре сделал селектор выбора языка что бы понять что в InputSelect НЕТУ никакого onselectionchange!!

WTF????????

НАХУЯ? нахуя тогда вообще нужен такой компонент, я не понимаю сука.
Аноним 11/08/23 Птн 19:32:10 2802594 977
Вот так тоже не работает, я сука не ПОНИМАЮ как они предполагали что мы будем использовать этот ебучий компонент, с сабмит формами как в 90х?

<InputSelect class="selectpicker btn " style="color:white" data-width="fit" @bind-Value="CultureName" @bind-Value:event="OnLanguageChanged">
<option style="color:black" data-content='<span style="color:black" class="flag-icon flag-icon-us"></span>'>@EnglishNativeName</option>
<option style="color:black" data-content='<span style="color:black" class="flag-icon flag-icon-mx"></span>'>@RussianNativeName</option>
</InputSelect>


@code {



public string CultureName { get; set; }
private string selectedLanguage = "en-US"; // Default language is English

public string EnglishNativeName { get; set; }
public string RussianNativeName { get; set; }


protected override async Task OnInitializedAsync()
{
CultureName = CultureInfo.CurrentCulture.NativeName;
EnglishNativeName = new CultureInfo("en-US").NativeName;
RussianNativeName = new CultureInfo("ru-RU").NativeName;
}

private void OnLanguageChanged()
{
ApplySelectedLanguage();
}
Аноним 11/08/23 Птн 19:47:10 2802607 978
>>2801704
У тебя есть возможность запустить этот таск в отдельном Application? Не в смысле в отдельном инстансе программы, а в Application.Run?
Аноним 11/08/23 Птн 19:47:49 2802608 979
Аноним 11/08/23 Птн 20:24:36 2802668 980
image.png 22Кб, 945x160
945x160
Это какой-то рофл?
Аноним 11/08/23 Птн 20:27:59 2802674 981
Аноним 11/08/23 Птн 20:30:43 2802677 982
>>2802674
Оу, спасибо, я немного слепой.
Аноним 11/08/23 Птн 21:41:43 2802819 983
>>2801704
почему ты не можешь вызвать его говнометод в отдельном скедулере и там абортнуть тред?
Аноним 12/08/23 Суб 11:13:10 2803321 984
>>2802607
Разве это не чисто виндовое АПИ?

Вся та суть того что сейчас делаем - это перенос старого работавшего приложения на фреймворке с WPF на .NET6 и дробление на наносервисы.
Аноним 12/08/23 Суб 11:50:05 2803339 985
>>2802819
переходи уже на дотнет 5+ что ли
Аноним 12/08/23 Суб 14:08:24 2803474 986
>>2801130
Не путай WPF и Авалонию.
Это у авлонии проблемы сол шрифтами, у майкросфтовского ВПФ все норм и есть вагон и тележка решений (причем я считаю это уступками для идиотов).
Аноним 12/08/23 Суб 17:47:17 2803790 987
>>2803474
каких идиотов. что для тебя есть идиотизм

вот у меня монитор. фулхд+
и берем аппаратное ускорение и виндовое сглаживание.
впф - мыло (лечится), гугл хром - мыло (на фф все норм), студия норм. электроны приложения - мыло, авалония - мыло (лечится только если принять их гигантские шрифты), skia - мыло (в общем то на нем и есть авалония, так что это ее косяк)

в впф лечится. и в электроне лечится - просто всем похер.
Аноним 13/08/23 Вск 00:58:06 2804365 988
>>2803339
>У НАС МОДНЯВАЯ АСИНХРОНЩИНА НО УБЛЮДОК ИГНОРИТ ТОКЕН
>ну ок вернись с небес на землю запусти его каловый метод в отдельном треде и абортни его
>ты че переходи на датнет 5
вот к чему ты это высрал? у нас в тиме уже семёрка и будет восьмой сразу по релизу, какое отношение это имеет к обсуждаемому сабжу и тому как иметь дело с многопотоком - я хуй знает, но тебе должно быть стыдно за свой уровень "компетентности"
Аноним 13/08/23 Вск 01:13:13 2804369 989
>>2804365
>вот к чему ты это высрал? у нас в тиме уже семёрка и будет восьмой сразу по релизу
>свой уровень "компетентности"
О, мистер компетентный сеньер
О, великий гуру многопоточного программирования
Научите меня, неуча, как абортировать треды в дотнет 5+
И я посыплю голову пеплом и буду молиться на величайшего из величайших.
Аноним 13/08/23 Вск 01:20:40 2804371 990
>>2804365
Читать скрытое всем, кроме величайшего

Кстати в одном из прошлых тредов давали решение аборта треда в дотнеткор+ через хаки. вида

private static extern bool TerminateThread(

И вроде бы работало, вот только Thread подвисает в неизвестном состоянии. А еще это только винда значит.
Аноним 13/08/23 Вск 11:48:45 2804530 991
>>2804365
Сказочный долбоеб...
Аноним 13/08/23 Вск 13:41:00 2804638 992
>>2803790
>что для тебя есть идиотизм
Шрифт имеет свою сетку, которая при несовпадении с сеткой пикселей дисплея неизбежно ведет к говну. И чем мельче кегль, тем больше сложностей. Поэтому существуют специалисты-шрифтовики, которые этим занимаются и чуть ли не создают шрифт конкретно под задачу, чтобы добиться наилучших результатов при определенном кегле, несмотря на тот факт, что шрифт зачастую векторный и способен в масштабирование.

Это вообще касается любой векторной фигуры, которая имеет свои полюсы только при достаточной плотности пикселей, иначе проще работать с растром. Чудес не бывает.

Все методы от майкрософт в WPF это по сути костыли, которые позволяют васянам натянуть сову на глобус. Там так искажается шрифт, что одни (хром) возвращаются к мылу, другие (фф) соглашаются на покосоебленные детали.

Но есть вот прям конченые имбецилы, которые считают, что дав 5% к высоте шрифта, умещающегося в 10 пикселей, смогут каким-то там ВОЛШЕБСТВОМ добиться красивого результата. Стоит ли имаджинировать их ебала?

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

Все остальное, типа привязок к пикселям — подспорье и небольшой тюнинг. Я когда рисовал мелкие векторные иконки, то все равно ориентировался на конкретный размер иконки и рисовал по сетке — только тогда получился чистенький и красивый результат. Всякие привязки делали круглые формы яйцеобразными, либо неоднородными по четкости.
Аноним 13/08/23 Вск 14:18:23 2804661 993
2023-08-1314-12[...].png 157Кб, 1024x618
1024x618
А можно как-то вытащить файл из нюгет-пакета? Я вывел тему приложения со всеми стилями в отдельный проект, хочу его сделать универсальным, как библиотека. Но есть словарь ресурсов xaml, в котором определены базовые цвета с ключами (по типу пикрил).

Идея состоит в том, чтобы копировать это xaml документ и править цвета под конкретное приложение. А как это делать с нюгетами? Может есть возможность прикреплять сопутствующий файл?
Аноним 13/08/23 Вск 14:24:14 2804663 994
>>2804661
Отпиздил бы тебя за такой нейминг.
> А как это делать с нюгетами? Может есть возможность прикреплять сопутствующий файл?
Просто переопределяешь ключи, они будут скрывать ключи из нюгет пакета.
Аноним 13/08/23 Вск 14:26:30 2804664 995
>>2804638
> взять стильный модный молодежный монитор с большей плотностью пикселей и не видеть мыла, либо не мельчить со шрифтами, либо рисовать свой собственный шрифт под конкретный кегль.
вот только заставить мир покупать мониторы невозможно и глупо.
не мельчить - ну разве что в метроподобных и всякое материалдизайно приложениях такое можно. вот в GDI получается мельчить и все норм.
свой шрифт вообще не нужен если не лепим всякие аляповатые красивости (нам ехать, а не шашечки)

в итоге "кривое" сглаживание суть наименьшее зло, ведь позволяет сделать шрифты приближенные к GDI, и только особо придирчивые знатоки узреют проблему. А таких 3.5 человека на галактику. А вот мыло видно даже домохозяйка, которая и слово шрифт то не знает.

И еще можно использовать 4й хак - в зависимости от DPI выбирать рендер шрифтов тем самым сидя на 2х стульях (без пик и других торчащих предметов)
Аноним 13/08/23 Вск 14:31:48 2804667 996
>>2804661
Есть вариант при установке нугет пакета в дерево твоего проекта копировался файл. Как реализовано не помню но возможность есть
Аноним 13/08/23 Вск 16:09:01 2804786 997
>>2804663
>Отпиздил бы тебя за такой нейминг.
Или ты про .Border6 ... 8 и т.д.?

Я еще не определился как лучше. Суть в том, что создается очень большой список из брашей, чуть ли не около сотни, но у всех них есть пересекающиеся цвета. Вот я хочу собрать все в одну кучу, так называемых базовых цветов. К примеру Button.Border и TextBox.Border ссылаются на один базовый цвет Border. Но что-то может иметь небольшой оттенок, поэтому базовых цветов Border может быть несколько.

Как это адекватно назвать — хз. Никаких правил или договренностей на этот счет я не нашел. Называть по оттенкам Border.Dark Border.Medium Border.Light вроде как логичнее, но в зависимости от темы, Dark может стать Light и наоборот. А еще нужно, чтобы очередность именования подразумевала вставку новых оттенков.

Пока что у меня так: .Border2 .Border4 .Border6 с резервом под оттенки.
Не знаю пока как лучше поступить.
Аноним 13/08/23 Вск 16:13:43 2804790 998
>>2804786
Называть нужно так, чтобы было понятно, где и для чего используется тот или иной ресурс, например - EditPageMagicButtonTooltipHeaderTextBlockSolidColorBrush
Либо чтобы сделать названия короче можно разделить словари ресурсов по страницам.
Аноним 13/08/23 Вск 16:15:03 2804791 999
>>2804790
Либо, если это ресурс по умолчанию, то так и пишешь EditPageDefaultTextBlockSolidColorBrush
Аноним 13/08/23 Вск 16:23:25 2804805 1000
>>2804790
>Называть нужно так, чтобы было понятно, где и для чего используется тот или иной ресурс
Так он получается динамическим по своему предназначению, но статическим по ключу.

>Либо чтобы сделать названия короче можно разделить словари ресурсов по страницам.
Это так и сделано. У меня отдельный словарь потом все это смешивает.
Аноним 13/08/23 Вск 17:00:31 2804837 1001
студия достала ругаться на async void
я знаю про их опасность и поэтому содержимое этого метода в try..catch (которое и то не всегда нужно)

как по мнению студии я должен делать асинк код - хендлер + доп метод с Task что ли.

БЕСИТ
Аноним 13/08/23 Вск 17:30:53 2804890 1002
>>2804837
Вот бы господь покарал каждого уебана, который в своем коде async void без трай кеча делает. Эх, мечты-мечты.
Аноним 13/08/23 Вск 17:38:32 2804898 1003
>>2804837
Возьми да отключи ненужные предупреждения в проекте/файле
Аноним 13/08/23 Вск 18:34:47 2804989 1004
Аноним 13/08/23 Вск 18:42:01 2805005 1005
када перекат???
Аноним 13/08/23 Вск 18:50:18 2805018 1006
Аноним 13/08/23 Вск 19:27:19 2805070 1007
Аноним 13/08/23 Вск 19:33:04 2805077 1008
>>2804664
>только особо придирчивые знатоки узреют проблему. А таких 3.5 человека на галактику
Это как аудиофилы, которым нужны провода из волос девственницы, чтобы убирать косяки звука, которые 98% населения никогда не услышит.
Аноним 13/08/23 Вск 23:44:01 2805352 1009
>>2801704
> забрать и сделать нормально - мне не разрешают, говорят что его задача - пусть он и делает, а у тебя есть свои

Правильно говорят. Тебе за это не плятят. Если начальство это не ебёт, и начальство не ебёт тебя - не твоя проблема.
Аноним 13/08/23 Вск 23:51:00 2805354 1010
>>2805352
В итоге у него просто исчерпается пул или будет миллион спящих потоков и приложение начнет просто тормозить

Хотя даже до этого не дойдет - ведь если девайс завис, то нужно обращаться к нему снова. Начнешь новый сеанс - бац, старый ожил и спамит своими данными в девайс. И как с этим жить?.

Так что его прямая проблема.
Аноним 13/08/23 Вск 23:57:29 2805361 1011
>>2805354
Терпильная тактика
Аноним 14/08/23 Пнд 18:45:23 2806336 1012
Почему статические виртуальные методы появились только в net 7?
Аноним 14/08/23 Пнд 18:59:05 2806363 1013
>>2806336
а почему IReadOnlyList появились когда появились, и как костыль?
А почему фрозен коллекции только сейчас?
А почему нуллабилити появился когда появился и снова как костыль?
А почему FolderSelect диалог появился в WPF только вот щас (и то не знаю что в итоге), когда WPF уже мертвым нарекли сами мс?
А почему годами висит предложение "ну сделайте вы возможность задать ConfigureAwait(false) на уровне сборки"?
Аноним 14/08/23 Пнд 19:15:33 2806378 1014
>>2806363
> а почему IReadOnlyList появились когда появились, и как костыль?
При этом его не реализует IList...
Аноним 14/08/23 Пнд 19:18:20 2806383 1015
>>2806378
Так он же не ридонли.
Аноним 14/08/23 Пнд 19:23:56 2806390 1016
>>2806383
он имеет весь контракт IReadOnlyList , а не реализует он просто потому что про эту очевидную деталь вспомнили не на этапе проектирования языка, а аж потом и не стали ломать бинарную совместимость и получилась хрень.
Аноним 15/08/23 Втр 12:59:15 2806930 1017
Стоит ли идти тим лидом (за хорошие деньги)? Не потеряю ли я хард скиллы, если буду работать тим лидом на проекте, в основе которого легаси (фронт ну точно легаси)?
Аноним 15/08/23 Втр 18:27:46 2807429 1018
>>2806930
На завод иди, кнопки красить. Хард скиллы до небес взлетят.
Аноним 15/08/23 Втр 21:42:03 2807581 1019
>>2806930
Сходи, потусуйся пол года и если что уйди в другое место или прямо в это же на другую должность.
Лично я ебал в рот управлять людьми. Как бы грустно не звучало но я хороший исполнитель и паршивый руководитель
Аноним 15/08/23 Втр 22:07:03 2807588 1020
Вот я часто слышу, что наследование - бяка.
Но допустим. У меня есть класс: СерверУстройств, СерверПользователей.
Все отличие в них - это парсер которым парсятся байтики и эндпоинты к которым надо отправить сообщение.
Так почему мне бы не сделать БазированныйСервер. Который будет в себе содержать всю логику которая общая. И при этом, вместо того чтобы возиться с женериками и конфигурированием DI - не описать в СервереУстройств и СервереПользователей - специфичные парсеры и эндпоинты.
Что будет в этом плохого?
Аноним 15/08/23 Втр 22:55:48 2807612 1021
>>2807588
Почему бы не сделать композицию из функций, где отличаться будет только функция парсера?

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

DI – удобная штука. Можно сделать экстеншены и конфигурировать будет удобно
Аноним 15/08/23 Втр 22:58:13 2807615 1022
>>2807588
А почему не сделать один сервер и передать в два инстанса разные парсеры?
Аноним 15/08/23 Втр 23:14:46 2807623 1023
>>2807615
Потому что тогда начинается;

Server<TContext, TParser, TMessage, TDispatcher>
where TParser<TContext, TMessage>, IParser<TContext, TMessage>
where TDispatcher<TContext, TMessage>, IParser<TContext, TMessage>

А я этого не хочу.

Дополнительно - я не хочу чтобы мне приходилось каждый раз в случае если я что-то там добавляю - бегать и регистрировать в отдельный файл все эти зависимости.

>>2807612
>DI – удобная штука. Можно сделать экстеншены и конфигурировать будет удобно
Удобная. Но в ряде случаев - не нужная.
Аноним 15/08/23 Втр 23:35:47 2807629 1024
>>2807623
>Потому что тогда начинается;
дизайн ради дизайна. ну значит страдай
Аноним 16/08/23 Срд 12:38:17 2807883 1025
Rider или Visual Studio?
Аноним 16/08/23 Срд 12:50:34 2807902 1026
Аноним 16/08/23 Срд 12:57:09 2807909 1027
>>2807902
нет чел, я просто хочу с кайфом прогать, а не пердолиться
Аноним 16/08/23 Срд 13:04:56 2807920 1028
>>2807909
тогда тебе правильно подсказали - vim
с райдер или студией ты будешь регулярно "да епрст че оно все красное, че оно не билдится, что за msbuild ошибка которая ни на что не влияет но постоянно висит в уведомлениях студии, да блин че ты на точках останова виснешь и появляется мессаджбок что оно что то там резолвит. чего оно тормозит то так. чего оно не обновляется без впн, что за оом при билде у меня 100500 памяти, а оно ж вроде 64битное стало и даже если оом почему его нет при повторном билде, почему дебаг такой ущербный (ну да в вим полная жопа с ним, но то ж вим, а это студия - как бы главная IDE), что за тупой навигатор по коду в 23 году блин и т.д."

с vim у тебя будет "да блин как неудобно", но тут же "так это vim, а чего я ждал" и сразу спокойствие от осознания.
Со студиями же жопа будет гореть ибо такого осознания не будет. Нет оправдания ущербности студиям и райдерам.
Аноним 16/08/23 Срд 13:44:49 2807957 1029
>>2807909
Ну тогда х.з.
Меня студия в принципе вполне устраивает. Можно на неё еще суперчарджер сверху накатить и вообще норм будет.
Аноним 16/08/23 Срд 14:28:39 2808042 1030
А ну как нужно пояснение.

Залез в теорию по шарпу и увидел создания стека таким образом Stack randomnumber... , это че серьезно так на шарпе создается стек и другие базы?

Я просто анон, который вкатылся в плюсы и мучаюсь от этого, ибо документация для iq 300, нужно следить за памятью, а иначе идешь нахуй, да да знаю что можно создать стек на плюсах также но с помощью stl.

Пиздец, если это правда и так вы пишите стек и другие, то я в ахуе нужно было на шарп вкатываться, а не в эту ебанную головоломку
Аноним 16/08/23 Срд 14:45:51 2808063 1031
>>2808042
У меня другой вопрос. То как ты мысли выражаешь - это твоя личная особенность или тебя так плюсы поломали?
Нихуя же не понятно.
Аноним 16/08/23 Срд 15:49:48 2808160 1032
>>2808063
Да нормально написал, но скорее плюсы поломали меня.
Аноним 16/08/23 Срд 16:34:59 2808236 1033
Сап. Мужики, есть способ крякнуть Aspose.Words.NET дллку? А то цена за лицуху кусается, но именно эта тема может намана помочь на работе
Аноним 16/08/23 Срд 16:44:15 2808252 1034
Никому не нужен впф разработчик с годом опыта?
Аноним 16/08/23 Срд 16:50:08 2808263 1035
>>2808236
Дико обфусцирована или не вскрывал?
Модификация дотнетовских дллок обычно буквально в два клика делается
Аноним 16/08/23 Срд 16:56:25 2808276 1036
>>2808263
Вроде как обфусцирована, из того что я вижу через dotPeek, в классе Licence у ребят куча полей просто не отображается (типа названия) нет.
Вот я и хочу понять каким образом там можно эту блядскую проверку на лицензию убрать, потому что в стоке она при работе с файлом накладывает туда вотермарку блэд
Аноним 16/08/23 Срд 17:03:59 2808287 1037
>>2808263
Если есть инструкция как лицуху в два клика крякнуть, буду благодарен если дашь))
Аноним 16/08/23 Срд 17:56:18 2808417 1038
>>2808287
за 1199 долларов есть надежный кряк
Аноним 16/08/23 Срд 20:06:01 2808587 1039
>>2808042
Стек на шарпе создается:
var stack = new Stack<int>();

Все.

В плюсах. Ты создаешь стек:
stack<int> stack;


Про память. Тебе никто не мешает прикрутить к плюсам свой умный алокатор или пользоваться смарт поинтерами.
Аноним 16/08/23 Срд 20:31:24 2808614 1040
Сишарп все? Активность постинга в этом треде уровня дохлого голанга. Даже на перекат всем похуй.
Все, сдох.
Аноним 16/08/23 Срд 20:34:45 2808617 1041
>>2808614
Вот и уёбывай в свой голанг.
Аноним 16/08/23 Срд 22:54:02 2808733 1042
>>2808587
>var stack = new Stack<int>();
Stack<int> stack = new();
Аноним 17/08/23 Чтв 00:50:58 2808784 1043
1692222656552.jpg 242Кб, 818x1474
818x1474
Аноним 17/08/23 Чтв 01:16:19 2808791 1044
>>2808733
В ходе долгих размышлений на этот счет - я пришел к выводу, что в методе - лучше использовать как раз
> var stack = new Stack<int>();

Почему?

Потому что ситуация в духе:

SupperDupperClass<SupperDupperType1, SupperDupperType2, SupperDupperType3> some = new();

менее читаемая, чем

var some = new SupperDupperClass<SupperDupperType1, SupperDupperType2, SupperDupperType3>();
Аноним 17/08/23 Чтв 01:22:32 2808793 1045
>>2808617
Я хочу разобраться почему постинг здесь хуйня.
Аноним 17/08/23 Чтв 01:33:56 2808798 1046
>>2808793
Тебя это ебать не должно.
Аноним 17/08/23 Чтв 01:44:10 2808804 1047
>>2808793
Потому что уже 500+ постов как тред в бамплимите, умник.
А у меня нет картинки с аниметянками, чтобы перекатить уехал в отпуск с новтбуком, на ноутбуке только браузер, докер и студия есть.
Ну а без аниметянок я перекатывать не хочу.
Аноним 17/08/23 Чтв 01:47:43 2808806 1048
>>2808804
Возьми из шапки этого треда.
Аноним 17/08/23 Чтв 14:22:05 2809363 1049
>>2808614
Ну у меня вопросов пока не возникало. Что писать? От шарпа я не ушел.

Вот давича решил воспользоваться сервисами яндекс клауда, а точнее сервисами машинного обучения: переводом, озвучкой (gpt-чат пока только для избранных) — хотел сделать себе аналог переводчика видево яндекс браузера, но для своих, локальных видео.

Какая же эта залупа дорогая получилась, пиздец просто. Если взять условный видеокурс на ~ миллион символов, то его перевод и переозвучка обойдется в 1500 рублей. За такие деньги можно и от человеческих переводчиков получить человеческую озвучку на сервисах по переводу уроков.
При этом яндекс браузер переводит контент килотоннами бесплатно.

В общем, эксперимент не удался.
Правда я тупо отправлял джейсон-реквесты, а там есть еще технология gRPC, которую мой моск не осилил, а там стоимость рассчитывается для gRPC и Rest по разному.
Аноним 17/08/23 Чтв 14:38:39 2809408 1050
>>2809363
выглядит как просто надстройка над платным сервисом. С чего ей быть рентабельной.

>>2808614
ну так это не SO. Спрашивать тут нечего.
Отчеты разве что писать
ну вот я вчера взял linq2db, а там запросы такого вида
db.Product.Set(p => p.Discontinued, true).Update();
А у меня только строки вида "Discontinued" и как вызвать Set?
И чтобы быстрее банального Delegate.Invoke
Пришлось расчехлять дикий уровень рефлексии (Set - экстеншен метод с кучей дженерик перегрузок) и юзать Expression-кодоген.

Ну я сделал в итоге. Вот я молодец. Только кому оно надо?!!
Аноним 18/08/23 Птн 20:16:02 2811266 1051
Как добавить логгирование в библиотеку? Пока думаю над созданием статического класса, у него будет интернал метод для вызова события, и собственно событие, на которое при желании сможет подписаться потребитель либы. Какие подводные?
Аноним 19/08/23 Суб 00:15:51 2811480 1052
>>2811266
Зря ты стал на этот путь
Аноним 19/08/23 Суб 03:01:55 2811544 1053
>>2811266
Мне обычно глубоко похуй и добавляю в зависимости логгер от майков а там юзер пусть сам решает что, откуда и куда
Аноним 19/08/23 Суб 03:49:52 2811549 1054
>>2811266
Если ты выбрал среди всех этих диагностик, трейсорс, евенсорс, логгеры и выбрал таки логгеры, то вот
https://youtu.be/Sq_h5bVWJ0k?t=2006
Аноним 19/08/23 Суб 16:26:57 2811963 1055
>>2740238 (OP)
Хотелось бы узнать есть какие то сервисы по проверке чистоты/читабельности того говнокода что ты написал ? Сам только пытаюсь учить шарпы
Аноним 19/08/23 Суб 18:25:31 2812099 1056
>>2811963
Итт лучший сервис...
Аноним 19/08/23 Суб 19:33:51 2812244 1057
>>2812099
Да. Тут напихают от души
Аноним 19/08/23 Суб 20:25:58 2812365 1058
>>2812099

ну тогда разъебите что ли(заранее спасибо)


using System;
using System.Threading;

namespace Pong
{
public class Pong
{
int width;
int height;
int racketXPosition;

Board board;
Racket player;
BotRacket CPU;
Ball ball;
Score score;

ConsoleKeyInfo keyInfo;
ConsoleKey consoleKey;

public int Width { get => width; set => width = value; }
public int Height { get => height; set => height = value; }
public int RacketXPosition { get => racketXPosition; set => racketXPosition = value; }
public Board Board { get => board; set => board = value; }
public Racket Player { get => player; set => player = value; }
public BotRacket CPU1 { get => CPU; set => CPU = value; }
public Ball Ball { get => ball; set => ball = value; }
public Score Score { get => score; set => score = value; }
public ConsoleKeyInfo KeyInfo { get => keyInfo; set => keyInfo = value; }
public ConsoleKey ConsoleKey { get => consoleKey; set => consoleKey = value; }

public Pong()//конструктор по умолчанию
{
Width = 70;//x (дефолт:70)
Height = 25;//y (дефолт:25)
RacketXPosition = 4;//(дефолт:4)
Board = new Board(Height, Width);
Ball = new Ball(Width, Height);
Score = new Score();
}

public void Input() //управление равекткой с клавиатуры
{
if (Console.KeyAvailable)
{
KeyInfo = Console.ReadKey(true);
ConsoleKey = KeyInfo.Key;
}
switch (ConsoleKey)
{
case ConsoleKey.W:
Player.Up();
break;


case ConsoleKey.UpArrow:
Player.Up();
break;

case ConsoleKey.S:
Player.Down();
break;

case ConsoleKey.DownArrow:
Player.Down();
break;

}
ConsoleKey = ConsoleKey.Spacebar;//на случай если кому то хочется статичную ракетку по умолчанию
}

public void Setup()//задание начальных параметров для игры
{
Player = new Racket(RacketXPosition, Height);//дефолт (x=4)
//CPU= new BotRacket(width - racketXPosition, height);//дефолт (x=Width - 4)
CPU1 = new BotRacket(Width - RacketXPosition, Height);//дефолт (x=Width - 4)
KeyInfo = new ConsoleKeyInfo();
ConsoleKey = new ConsoleKey();

Console.Clear();

Board.Write();
Player.Write();
CPU1.Write();
Ball = new Ball();
Ball.Write();
Score.PrintScore();

}

public void Run()//процесс игры
{
while (true)
{
Setup();
while (Ball.X >= RacketXPosition && Ball.X <= Width - RacketXPosition)///3 и 67 нраницы(стоит создать поля под них???)
{
Input();
Ball.Move(Player, CPU1);
CPU1.BotMove(Ball);
Thread.Sleep(50);
}
if (Ball.X < RacketXPosition) Score.player2++;
if (Ball.X > Width - RacketXPosition) Score.player1++;
}
}
}

public class Score
{
public int player1 { get; set; }// счёт для каждого игрока
public int player2 { get; set; }
public Score()
{
player1 = 0;
player2 = 0;
}
public void PrintScore()//вывод счёта
{
Console.SetCursorPosition(0, 26);
Console.WriteLine("first player : second player");
Console.WriteLine(player1 + " : " + player2);
}
}

public class Ball
{
public int X { get; set; }//координаты мяча
public int Y { get; set; }
public int xAngle { get; set; }//смещение в каждой из плоскостей за один кадр
public int yAngle { get; set; }
public Ball()
{
Random rnd = new Random();
X += rnd.Next(30, 40);
Y += rnd.Next(9, 16);
xAngle = 1;
yAngle = 1;
}
public Ball(int w, int h)
{
Random rnd = new Random();
X += rnd.Next(w / 2 - 5, w / 2 + 5);
Y += rnd.Next(h / 2 - 3, h / 2 - +3);
xAngle = 1;
yAngle = 1;
}

public void Write()
{
Console.SetCursorPosition(X, Y);
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.Write("");
}
public void Move(Racket r1, Racket r2)//логика раброты мяча тут
{
Console.SetCursorPosition(X, Y);
Console.Write("\0");//стираем предыдущую позицию

X += xAngle;
Y += yAngle;//перемещаем мяч

if (Y < 2 || Y > 22)//проверка на удар об горизонтальную стену
{
yAngle
= -1;//меняем направление мяча
}

if (X < 3 || X > 67)//проверка на удар об вертикальную стену
{
xAngle = -1;//меняем направление мяча
}
//проверка на удар по ракетке
if (((X == 4) && ((Y >= (r1.Y - (r1.HalfRacket))) && (Y <= (r1.Y + (r1.HalfRacket))))) || ((X == 66) && ((Y >= (r2.Y - (r2.HalfRacket))) && (Y <= (r2.Y + (r2.HalfRacket))))))
{
if (Y == r1.Y || Y == r2.Y) { xAngle
= -2; }
else { xAngle = -1; yAngle = -1; }
}
Write();//отрисовываем мяч по новым координатам
}
}

public class Racket
{
public int X { get; set; }//координаты ракетки
public int Y { get; set; }
public int racketHeight { get; set; }//высота всей ракетки

public int HalfRacket { get; set; }//высота половины ракетки

public Racket()
{
X = 66;
Y = 12;
racketHeight = 25 / 4;
HalfRacket = racketHeight / 2;
}

public Racket(int x, int Height)
{
X = x;
Y = Height / 2;
racketHeight = Height / 4;
HalfRacket = racketHeight / 2;
}

public void Write() //отрисовка ракетки
{
for (int i = Y - (HalfRacket); i < Y + (HalfRacket); i++)
{
Console.SetCursorPosition(X, i);
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write("|");
}
}


public void Up()//ракетка перемещается вверх
{
if (Y - 1 - HalfRacket > 0)
{
Console.SetCursorPosition(X, Y - 1 + HalfRacket);
Console.Write("\0");//стираем предыдущую позицию
Y--;
Write();//отрисовываем текующую
}
}

public void Down()//ракетка перемещается вниз
{
if (Y + 1 + HalfRacket < racketHeight * 4 + 1)
{
Console.SetCursorPosition(X, Y - HalfRacket);
Console.Write("\0");//стираем предыдущую позицию
Y++;
Write();
}
}
}

public class BotRacket : Racket//ракетка управляемая компьютером
{
public BotRacket()
{
X = 66;
Y = 12 / 2;
racketHeight = 12 / 4;
HalfRacket = racketHeight / 2;
}
public BotRacket(int x, int Height)
{
X = x;
Y = Height / 2;
racketHeight = Height / 4;
HalfRacket = racketHeight / 2;

}
public void BotMove(Ball ball)//логика работы бота
{
if (ball.X > 35)
{
if (ball.Y > Y) { Down(); }
if (ball.Y < Y) { Up(); }
}
}
}

public class Board
{
public int width { set; get; }
public int height { set; get; }


public Board()
{
width = 70;//x=70
height = 25;//y=25
}
public Board(int h, int w)
{
height = h;
width = w;
}
public void Write()
{
{
//отрисовка границ поля в 2 цикла
for (int x = 0; x < width; x++)
{
Console.SetCursorPosition(x, 0);
Console.BackgroundColor = ConsoleColor.Red;
Console.Write("+");
Console.SetCursorPosition(x, height - 1);
Console.BackgroundColor = ConsoleColor.Blue;
Console.Write("/");
}

for (int y = 0; y < height; y++)
{
Console.SetCursorPosition(0, y);
Console.BackgroundColor = ConsoleColor.Red;
Console.Write("+");
Console.SetCursorPosition(width - 1, y);
Console.BackgroundColor = ConsoleColor.Blue;
Console.Write("/");
}

Console.ResetColor();
}
}



}

}
Аноним 19/08/23 Суб 20:42:02 2812381 1059
>>2812365
Код лучше закинуть на гист, как я с телефона буду тебе смотреть
Аноним 19/08/23 Суб 21:19:41 2812429 1060
Аноним 19/08/23 Суб 23:01:37 2812467 1061
>>2812429
Гпт4:

Ваш код в целом хорошо структурирован, но есть несколько областей, где можно сделать улучшения:

1. Сокращение дублирования кода:
- Методы `Up()` и `Down()` в классе `Racket` дублируются. Можно создать один общий метод с параметром направления.
- Код для отслеживания коллизий мяча с ракеткой в методе `Move()` класса `Ball` также дублируется. Можно оптимизировать его.

2. Использование констант:
- Желательно избегать "магических чисел". Это числа, которые присутствуют в вашем коде, но их значение и назначение не очевидны. Вместо этого создавайте именованные константы, чтобы улучшить читаемость кода.

3. Параметры по умолчанию:
- Вместо создания нескольких конструкторов с различными параметрами, вы можете использовать параметры по умолчанию.

4. Работа с свойствами:
- В C# свойства обычно используются для доступа к данным и их установки. Если вы предоставляете публичные свойства для каждого члена данных, это делает ваш код менее инкапсулированным. Некоторые из этих свойств, вероятно, могут быть скрытыми или защищёнными.

5. Оптимизация работы с консолью:
- Постоянное переключение курсора и использование `Console.Write` может снизить производительность. Для оптимизации вы можете создать двумерный массив символов для представления игровой доски и обновлять его содержимое вместо прямой записи в консоль.

6. Рефакторинг классов:
- Ваша структура классов немного запутанная. Класс `Pong` делает слишком много разных вещей: отслеживает состояние игры, обрабатывает ввод, управляет отображением и так далее. Рассмотрите возможность разделения этих функций на разные классы или методы.

7. Безопасность потоков:
- Вы используете `Thread.Sleep` для управления скоростью игры. Это работает, но есть более современные и гибкие подходы для управления частотой кадров, такие как использование таймеров.

8. Комментарии:
- Хороший код должен быть самодокументируемым. Вместо комментирования каждой строки или метода, дайте переменным и методам понятные имена. Комментируйте только те части кода, которые могут вызвать затруднения при понимании.

9. Инициализация переменных:
- Инициализируйте переменные там, где это возможно. Например, вместо того чтобы инициализировать `xAngle` и `yAngle` в конструкторе класса `Ball`, можно сделать это при их объявлении.

10. Определение направления движения мяча:
- Вместо использования отдельных переменных `xAngle` и `yAngle` рассмотрите создание перечисления или класса `Direction`, который определит направление движения мяча.

В целом, ваш код хорошо организован и легко читаем. Однако рефакторинг в соответствии с вышеуказанными рекомендациями поможет сделать его еще лучше.
Аноним 19/08/23 Суб 23:14:58 2812470 1062
>>2812467
> В целом, ваш код хорошо организован и легко читаем. Однако рефакторинг в соответствии с вышеуказанными рекомендациями поможет сделать его еще лучше.
@
> Ты написал говно но мне не разрешают открыто хуесосить юзеров. Так что внемли тому что выше и не позорься в следующий раз
Аноним 20/08/23 Вск 13:55:35 2812833 1063
>>2812467
А че, хорошо стелет...
Аноним 20/08/23 Вск 22:03:22 2813274 1064
>>2812833
Настолько, что думаешь, куда расти, чтобы ИИ не заменило через пяток лет. Думаю вкатываться потихоньку в машоб
Аноним 21/08/23 Пнд 13:13:32 2813670 1065
>>2813274
В умение перекатывать треды. Крайне нужное умение
Аноним 21/08/23 Пнд 17:12:04 2813950 1066
Аноним 21/08/23 Пнд 19:51:47 2814269 1067
>>2813670
> Крайне нужное умение
Где можно ознакомиться со статистикой зарплат?
Аноним 21/08/23 Пнд 19:55:45 2814272 1068
кто - то да перекатит
но это уже совсем другая история
Аноним 21/08/23 Пнд 20:01:23 2814280 1069
Аноним 21/08/23 Пнд 20:17:18 2814301 1070
>>2814280
дожили. уже жависты треды шарпистам создают.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов