Этого треда уже нет.
Это копия, сохраненная 7 сентября 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
sage 2 2740261
Ну ты и дебил блять ебаный, перекат после 1000. Репорт.
3 2740275
>>740261
Бамплимит на доске 500 постов
sage 4 2740280
5 2740341
>>740280
Перекатывают после 500 поста, лентяй.

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

Вот с другой стороны - разбить бы ебало пидору, который:
1. Сделал возможность наследования по умолчанию. Приходится как дебил постоянно sealed добавлять
2. Сделал enum таким кастрированным. Вот срсл, сравнить с С++ или жавой.
3. Нахуевертил вот этой хуйни с интерфейсами, которая сейчас. Это реально пиздец.
4. Нахуевертил эксепшинов там где они нахуй не нужны. Вот серьезно, какого хуя-то отключение сокета на другой стороне - должно кидать исключение-то? Ошибка со статусом - нормально было бы. Нет, блядь, лови в ебало эксепшн(Охуенно-то как если у тебя какой-то парк устройств, свет вырубился - твое приложение - на 5 минут - ушло в себя обрабатывать все это добро)
5. Перекатывает после 500 поста
10 2740847
>>740797
Чего у тебя жопа сгорела? Всё по правилам перекатов.
11 2740849
>>740767
Дебил, модификаторов наоборот не хватает нихуя. Где модификатор доступности только внутри неймспейса?
2023-06-2120-18-33.png131 Кб, 1158x113
12 2740895
Почему автор дважды конвертирует значение в стринг, вместо того, чтобы присвоить локальной переменной?
13 2740898
>>740895
Потому что он говнокодер. Как тебе такой ответ?
14 2740901
>>740849

>Дебил, модификаторов наоборот не хватает нихуя.


Почему именно интернал ставится по умолчанию? И можно это как-то изменить?

>>740898
Но он же сертифицированный работник майкрософт!
15 2740903
>>740895
Потому что хочет однострочник написать.

А экономить на спичках иди в си.
2023-06-2120-30-44.png134 Кб, 1197x928
16 2740905
>>740901

>Но он же сертифицированный работник майкрософт!


Если эти умельцы создали медиаплеер, у которого субтитры чисто белые, без контрастного фона или обводки, то хули ты от них хочешь?

Как будто у них есть специальный отдел по самым уебанским решениям на свете.
17 2740907
>>740901
В MS работают самые большие говнокодеры на свете. Это уже 20 лет ни для кого не секрет.
18 2740910
>>740895
Может после оптимизона значение захешируется и второго приведения не будет. Надо ассемблер посмотреть.
20 2740970
>>740968
Это IR. А надо ассемблер.
21 2740975
>>740968
У джитера свои оптимизации. Ассемблер в релизе смотри.
22 2740980
>>740903
Там return виднеется. Значит метод не однострочный, значит написать так ничто не мешало:

>var rk = resourceKey.ToSting();


>return dictionary.Contains(rk) ? dictionary[rk] : null;



И сахарок и оптимизон присутствуют.
23 2741006
>>2740335 →

>Сейчас по моему кроме автофака и майковского уже ничего не осталось актуального. И фич второго хватает в 95% случаев.


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

>>740797

>Сделал enum таким кастрированным


при этом он хоть и является этаким особым наследником int/byte но работает медленнее

>Нахуевертил эксепшинов там где они нахуй не нужны.


увы но должен быть один подход - либо коды ошибок либо ексепшены. либо это 2 параллельных апи, а кому оно надо
24 2741034
Аноны, тупой вопрос.
Есть код, начинается стандартно:
using System;
using System.Runtime.InteropServices;

Вопрос: разве "using System" не включает в себя "System.Runtime.InteropServices"? Это же подраздел System? Что я не понимаю?
25 2741055
>>741034
Нет не подраздел. Это имя неймспейса. То что оно похоже на иерархию - просто соглашение
26 2741056
>>741034
Вот есть у тебя папка "Картинки", в ней лежат пикчи и вложенные папки "Аниме" и "Хуйцы". Когда ты открываешь папку с картинками в проводнике Windows, ты же не видишь в ней пикчи с аниме и хуйцами? Надо отдельно открывать вложенные папки. С неймспейсами почти тот же принцип, разве что иерархия неймспейсов не обязательно соответствует физическому расположению каталогов с исходниками.
27 2741058
>>741056
Добра тебе и благополучия, родной!
ОТКУДА ТЫ ЗНАЕШЬ ПРО МОЮ ПАПКУ С ХУЙЦАМИ?!!? ТЫ ХАКИР?!
28 2741059
>>741055
Блин, точно, это же неймспейс а не заголовочный файл. Фейспальм.
Си головного мозга.
29 2741061
>>741058
По себе сужу прост
30 2741078
>>741061
чмоктя
31 2741268
Джуну на шарпе реально найти работу? А то все что я вижу это требуются мидлы да сеньоры.
32 2741372
>>741268
Да, реально. Но учитывай, что на старте зарплата будет в лучшем случае 60К рублей и на собесе придется выложиться как на мидла минимум.
33 2741613
Win2d или Skiasharp?
34 2741624
>>741613
По задачам.
35 2741625
>>741624
Нужно написать аналог пэинта с доп. фичами.
36 2741627
>>741625
WinForms.
37 2741634
>>741627
При чем тут это говно?
38 2741709
>>741613
Чем эти говна отличаются от стандартных средств WPF?
39 2741735
>>741709
Ну, во первых win2d это библиотека для uwp, а во вторых она работает напрямую с directx, минуя фреймворк, за счет чего достигается крайне высокая скорость работы с графикой.
40 2741742
>>741735
А с вектором рабоатет? или только растр?
41 2741745
>>741625
Для чего-то конкретного или просто рисовалка?
42 2741769
>>741613
https://youtu.be/xP1RMn8CixY
Чет школошарп по тестам не очень
43 2741770
>>741742
Только растр, насколько я знаю.
2023-06-2219-10-13.png12 Кб, 455x320
44 2741778
>>741627
>>741634
Чет проиграл. Пикрил под этим видео >>741769
45 2741781
>>741769
Школошарп по школотестам.
46 2741807
>>741613
Если поверхностно судить, то судя по всему Skiasharp это чет универсальное, а win2d майкрософтовское.
Очевидно что за универсальность придется платить функционалом или производительностью.

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

Но опять же, тут нужно навернуть оба говна, чтобы понять в чем нюансы. По себе знаю, что хватает отсутствия одной детали, чтобы перечеркнуть все плюсы.
47 2741902
>>741742
Хотя нет, есть и вектор.

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

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

В целом раздел эффектов понравился.
53 2741971
>>741927
Господи, какие же вы бесполезные.
54 2742004
>>741947
WPF медленнее в плане рисования. Приходится кидать винформхост и рисовать уже на нем - сильно производительнее.
55 2742010
>>742004
Ну смотря какие у тебя цели.
Насколько я знаю, в винфомрсах тупо красятся пиксели. В WPF у тебя каждый штрих или кривая — это отдельный объект (причем со структурой из сегментов, патчей и фигур с поддержкой булевых операций). Мне нужно было второе, чтобы я мог кривую переместить, повернуть, отмасштабировать, перекрасить.

Зато впф определенно сосет в ричтекстбоксах. Настолько сосет, что сделать какой нибудь редактор кода с подсветкой синтаксиса официально невозможно.
56 2742013
>>742010

>это отдельный объект


именно. и когда их очень много, то все очень не очень.

>редактор кода с подсветкой синтаксиса официально невозможно.


да. AvalonEdit тому пример
57 2742022
>>742013

>и когда их очень много, то все очень не очень.


Ну дык все графические редакторы вещь тяжелая. Я знаком с векторными редакторами и структура объекта в WPF была очевидной и неизбежной. И в Corel Draw и в Illustrator устроено абсолютно так же.

Возможно для растра этого не нужно, хотя в фотошопе вроде тоже появились всякие blending options, смарт объекты и динамические градиенты, которые подразумевают хранение не только координат штриха, но и что-то еще.
58 2742032
>>742022
Крита лёгкая.
59 2742036
>>742032
Пфф, так в ней ничего по сути и нет. Опять же это растровый редактор, там своя атмосфера.

В векторе такой подход неприемлем, да и WPF все таки ориентируется на вектор. И если мы возьмем Gimp, то там ровно тоже самое, что и в WPF.
60 2742051
>>741778
I use WinForms btw
61 2742191
Если уж зашла речь о редакторах, как бы вы реализовали рисование различными кистями? К примеру есть кисть с текстурой карандаша, как сделать, чтобы при рисовании текстура не накладывалась сама на себя множество раз, превращаясь в сплошную линию?
62 2742198
>>742191
Сделать соответствие координат холста на который рисуешь, с координатами текстуры из которой рисуешь.
63 2742680
>>742191

>при рисовании текстура не накладывалась сама на себя множество раз, превращаясь в сплошную линию?



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

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

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

Но всё равно на техническом собеседовании лажаю и упускаю какие-то вроде бы очевидные нюансы теории. Как это фиксить?
65 2742775
>>742729

>Как это фиксить?


Не читать метанит, который предназначен для совсем маслят?
Вот даже в твоем вопросе нарушение логики. Если что-то спросили и ты не знаешь — выучи это и будешь знать.
66 2742778
>>742198
Не понял тебя
>>742680

> Не понял о чем речь. Как у тебя реализована кисть? Если это грубо говоря точки вдоль контура с неким шагом и с неким размытием, то решается это все собственно


Есть точки, есть кисть пик например, сейчас у меня для каждой вычисленной точки использую алгоритм Wu отрисовывается данная текстура, с центром в этой самой точке.

> шагом,


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

> текстурой. Она не всегда однотонная именно для этих целей. Если мы говрим об условном шуме, то там есть темные и светыле пятна, при наложении друг на друга никогда не дадут однородынй цвет.


Опять же все зависит от частоты.

> радиальным размытием кисти


Как это поможет?

> 4. режимом наложения (add, multiply, difference, color burn и т.д.)


Думал об этом, но в данном случае пространство между брызгами прозрачное как и остальной холст, поэтому хз что здесь можно наложить
67 2742821
>>742778
Чел ... ты видел как устроены кисти в фотошопах, зибрашах?
Если ты подобную монохромную текстуру загрузишь в фотошоп, то будет ровно тоже самое, поэтому шум кисти всегда имеет оттенки, либо не имеет, если зудожник использует кисть для маски.
Сейчас, у тебя текстура не предназначена для твоих целей. Формально, у тебя не текстура, а альфа. Посмотри пикрил текстуоы карандаша, там тон неоднородный — есть светлые и темные участки, которые при наложении не сольются (само собой и альфаканал там должен присутствовать).

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

> радиальным размытием кисти


> Как это поможет?


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

> шагом,


> Если увеличить шаг, то линия не будет одной толщины,


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

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

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

Тут нужна наблюдательность. Установить все программы и смотреть что и как кто сделал.
68 2742953
>>742191
Как-как?
Выделил бы сущность:
BlendMode

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

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

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

Как-то так.
69 2742958
>>742191
Ну а в твоем случае, чтобы просто было - просто накладываем текстуру на весь холст, далее - вычитаем все что не по сплайну прошло.Т.е чирканули - накладываешь текстуру на холст, потом - вычитаешь из того что наложилось сплайн, потом инвертируешь наложение. Тогда текстурка будет равномерно и не перекрывать сама себя.
2023-06-2320-39-07.png77 Кб, 1131x508
70 2743036
>>742958
HUETA
Нужно по-человечески делать текстуру кисти. Ты как это собрался поддерживать? А как же библиотеки кистей? Несовместимы? Идут в жопу?

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

А пытаться тайлить холст — это провальная идея. Она даже выглядеть будет супер пососно.
71 2743039
>>743036

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


И получаем в местах поворота сплайна наложение текстур при повороте, от которого хотел избавиться чел что спрашивал.

> А пытаться тайлить холст — это провальная идея. Она даже выглядеть будет супер пососно.


Ну, тут зависит. Вполне нормально может выглядеть, если текстура норм. Другое дело, что сильно компуктерно.

А нормальное решение - я предложил изначально постом выше. Выделить блендмод и там порешивать, как че накладывать. Кисть при этом - это отдельная сущность которая несет информацию только о форме, силе нажатия тексткрек, степени размытия краев, наклоне и т.д.
72 2743049
>>743039

>от которого хотел избавиться чел что спрашивал.


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

>Вполне нормально может выглядеть


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

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

>И получаем в местах поворота сплайна наложение текстур при повороте, от которого хотел избавиться чел что спрашивал.


Иногда не стоит идти на поводу претензий. Возможно причина проблемы в другом - в самой текстуре.
73 2743399
Есть ли в c# аналог vb.net модификатора доступа Shadows?
Объясню как он работает. Он затеняет метод\свойство базового класса, но не переопределяет как overrides. Метод в базовом классе по прежнему существует, но не виден при обращении к наследнику.

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

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

Как такое сделать в шарпе? Я наследую список, и мне нужно переопределить метод Add.
74 2743407
>>743399
Если тебе надо что-то перекрыть от базового класса - есть new.

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

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

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

}
75 2743413
>>743407
Да, спасибо.

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


Да мне там надо всего пара методов поправить, чтобы он добавлял в итем себя в качестве родителя.
76 2743475
Пипец у вас шарп на изичах. Сам дописывает и что удивительно правильно дописывает. Даже умеет анализировать имя переменной и подставляет нужный метод.
sage 77 2743491
>>743475
Шарп или Visual Studio?
78 2743505
>>743475
Я бы кстати эту фичу отключил бы, если бы знал как. Лично для меня - она чаще мешает. Я привык как раньше - хуячишь, потом мышечной памятью выбираешь че там intellisense предложит выбирать. А теперь так делаешь - и в результате у тебя не то что надо, приходится назад исправлять. Бесит.
79 2743530
>>743491
Студя конечно, но для бейсика таких штук нет - там только базовое автодополнение.
80 2743536
>>743530
Ну да, бейсик же мёртв.
81 2743560
>>743505
Да ну.
Мне например нравится, что когда инжектишь сервисы, она тебе сразу и ридонли поле полностью прописывает и параметр конструктора и сразу связывает их, причем с именами по кодстайлу. Удобна.
82 2743572
Подскажите по проблеме плиз. Есть edmx, database first. Мне нужно поудалять свойства из EntityType, так как их дохера и мапинг занимает кучу времени. Удаляю - выдает ошибку 3023. В чем ошибка-то, если я удалил эти свойства из модели, почему от меня требуется, чтобы я указал сопоставление? И как вообще сделать так, чтобы в таблицах, добавленных из бд, было только несколько нужных мне свойств, а не все 100?
83 2743573
>>743572
бля пикчи забыл
84 2743784
>>743572
Хуй знает, никогда не работал с database first.
Но чисто по логике и исходя из сообщения об ошибке, оно похоже ругается из-за того что свойство в БД не nullable и он не сможет его отрезолвить при обратной записи в БД.
Сделай столбец в БД nullable или задай ему дефолтное значение.
zoomer-eating-tide-pods.gif391 Кб, 652x562
85 2743825
Сап хуйтишники, крч решил я это омгмгм вкатиться в этот ваш закрытый гей-клуб на C#, так сказать язык для элит. Но мне нужно чисто так, для юнити, я просто недавно такой проснувся и понял, что я Кадзима-Гений и мне срочно нужно запилить свой шедевр российского геймдева. Ну крч, я туповат и в школке на паскале прям тупил постоянно, чё то для меня слишком много букаф и цифр было на клавиатуре. Но в институте я "паумнел"(учусь на ЫНЖЕНЕРА) и стал любителем Софии. И крч я понял что ООП это типа философия на минималках. И прям щас на изичах хаваю учебник "че-то там изучем си шарп хуярим игры для унити 5 издание"(кста норм учебник?). Но к чему это я. Какие вообще есть пути дальнейшего развития на этом языке? Мне просто прям чёт вкатывает вся эта ваша залупная хуйня для задротов комнатных.
86 2743864
>>743825
Если минимальная база по программированию имеется, то советую свой проект пилить, не важно на сколько это будет хуево и убого. На этом будешь учиться. Постоянный гуглежь и вопросы к gpt чату в помощь. Параллельно можешь читать что-то самое примитивное, для совсем вкатунов по твоему направлению. Вроде были раньше советы по книгам в шапке, но проебались. Загугли книжки сам. Бери самую простую и популярную.

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

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

Если базы нет, то сперва придется вкатиться в программирование. Не важно на каком языке. Иди учи язык, тот же шарп, по видосам с ютуба. Когда сможешь сам осилить самую простейшую консольную хуйню из задачников, то смотри первый совет.
87 2744189
Почему я не могу в out передать свойство класса?

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

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

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

Единственный минус такого подхода — твоя собственная сила воли. Я как любитель игр жанра выживач, обожаю аутировать и в целом не против длинных марафонов да потом еще все переделать заново.
2023-06-2517-16-22.png5 Кб, 777x87
90 2744199
>>744195
Но как?
91 2744213
>>744195
Ты врун. Свойство по сути является мотодом, поэтому не работает в качестве передачи переменной. Алсо в бейсике работает, но компилятор достаточно умен, чтобы потом оптимизировать и подставить временную переменную.
92 2744216
>>744213

>Алсо в бейсике работает, но компилятор достаточно умен, чтобы потом оптимизировать и подставить временную переменную.


И нахуй ломает всю инкапсуляцию.
93 2744269
>>744197
Я хочу сделать в жанре survival horror в духе ps1-ps2 игр(RE, Тихие Холмы). Голливудский сюжет уже запилил в своей голове.
Я так-то заходил на геймдемовские гейские ру форумы . Но чет разочаровался в таможних аутистах делающие говно игры на унити. У челов реально нет фантазии. Какое-то однотипное и скучное говно а не игры. Слишком дохуя НПС пытающиеся пилить игрули своей мечты. Ну справедливости ради походу не каждому дано быть псевдотворцом Кадзимой.
94 2744287
>>744216
Ну и каким же образом ломает?
95 2744311
>>744287
Не ломает, просто захотелось спиздануть хуйню с умным видом и заодно выебнуться на бейсик.
96 2744336
>>744269

>нет фантазии. Какое-то однотипное и скучное говно а не игры


какая фантазия может быть. ты их жизнь видел? они ЖИЗНЬ пилят. Вот из свежего - "симулятор жизни в хрущевке". А ты со своими фантазиями в жизнь лезешь. Ничего не понимаешь
97 2744360
>>744336

>какая фантазия может быть. ты их жизнь видел?


Так лол, а сильно ли отличается жизнь желтолицых?) Почему они могут высерать хотя бы поверхностного говно, берущее атмосферой и визуалом, а наши Васьки нет?)
98 2744365
Слушайте, а вот такой вопрос. Стоит ли читать какие-то книги? У меня под рукой лежит Рихтер, но там по версии фреймворка 4.5.
По сути, большая часть того, о чем он пишет, есть на msdn в более актуальной форме или даже на тех же метанитах.

Я понимаю, читать какую-то не привязанную к технологиям классику вроде "Грокаем алгоритмы". С другой стороны, хочется рассказывать теорию как сеньор-помидор, а не отталкиваться от практики.
99 2744374
>>744365
Я хуй знает как челы вообще не читают.
100 2744390
>>744365
Стоит. Интересны не какие-то книги на обобщенные темы (это с легкостью заменят туторы на ютубе и msdn), а когда обсасывают конкретную тему.

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

Не скажу, что я знаю всё, но в 10 раз больше, чем описано в мдсн, метанитах и туторах на ютубе.
101 2744440
>>744390
Намеренная политика, когда эффективно пользуется системой только её разработчик и приближенный, а остальные барахтаются в говне не понимая что делают, это дает конкурентное преимущество майкрософт. Эту обфускацию довели до того, что теперь без нейросети не поймешь даже с какой стороны подходить. Но и нейросети манипулируемы, их можно заставить выдавать неактуальные данные, а настоящие придерживать для себя.
102 2744467
Объясните почему на метаните тема перегрузки методов в разделе классы и структуры а скрытие методов в разделе ООП?
103 2744469
>>744467
А где им еще быть. Оно там и должно.
перегрузки это не фича ооп, это диспетчеризация методов.
А сокрытие это уже инкапсуляция - один из китов ооп. Структуры же - хитрожопые подобия классов со своими премудростями
104 2744475
>>744469
Разве не полиморфизм?
105 2744479
>>744390

>Стоит. Интересны не какие-то книги на обобщенные темы (это с легкостью заменят туторы на ютубе и msdn), а когда обсасывают конкретную тему.


>


Что посоветуешь?
106 2744480
>>744475
смотря что ты подразумеваешь под перегрузкой методов
107 2744688
>>744467
Ты бы с этим вопросом к создателю ресурса и обратился. Метанит - это не какой-то академический справочник сделанный по всем канонам, а просто ресурс одного чувака, который начал когда-то для себя систематизировать материалы и не смог остановиться.
108 2744796
>>744688
Тащемто, метанит очень хуёвый источник информации. Утверждаю, как прошедший через эти говна.
109 2744978
>>744796
А какой не хуевый? Хотя бы на уровне джуна.
110 2745007
А в шарпе есть оператор "And Also"? В этмо случае сперва проверяется первый операнд и если он уже вернул False, то второй операнд не будет даже проверяться.
111 2745044
112 2745170
>>744796
Если использовать в режиме "Бля, как же эта хуйня называется/кодится. Вот бля, забыл" По быстрому посмотреть и вспомнить. Вобщем как сборник заметок, которые пролистать проще, чем в МСДН ковыряться.
113 2745191
А где старая шапка, которая очень объемная такая была? Там еще много полезной литературы было по возрастанию сложности. Куча всяких ресурсов и прочего. Почему её убрали?
114 2745208
>>745191
Там большинство уже устарело и для начинающих будет просто вредно.
115 2745266
Сап, дотнетач, кто-нибудь сталкивался с проблемой рандомно перестающего слушать запросы Кестрела/контейнера Докера?

Есть приложение, которое разворачиваю в Докере, сначала всё ок. Но если подождать какое-то рандомное время и попробовать отправить запрос, то в ответ будет нихуя. Само приложение при этом точно работает, один фоновый сервис в лог пишет в нём. Если перезагрузить контейнер, то всё снова будет ок, но заёбывает. Гуглил проблему, нашёл что-то типа такого: https://github.com/dotnet/aspnetcore/issues/45215, но у меня дотнет 6. Единственное: у меня нет launchsettings.json в проекте, конвертил его из консольного в WebApi и как-то забил на это, вроде и так работает
116 2745504
Зачем в шарпе методу нужен ридонли? Кто ему присвоит значение? Он же метод без параметров!
117 2745506
>>744479
Не знаю. То, что тебе лично нужно. У меня были проблемы с WPF, а еще анон мне тут посоветовал книжку про Dependency Injection.
118 2745516
>>745504
Чтоб кумпилятор хардкодил всю хуйню.
119 2745529
Промониторил вакансии у меня в стране. На сишарп почему-то мало откликов. Около 50. На джаву по 200-300. Почему так? Стоит ли вкатываться в сишарп в таком случае раз никто не идет туда? Хочется успеть на поезд пока пиздец с вакансиями еще не докатился до моей страны
120 2745580
>>745516
Пипец. 23-й год на дворе, а мне еще на SO и другие погромисты втирают что-то про "да не парься, компилятор оптимизирует лучше тебя".

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

Нахуй и в пизду. Не доверяю я этому вашим оптимизациям. Они странные. С одной стороны "не парься" а с другой залупа, вроде "нельзя передать метод в out" или "помечай метод ридонли".
121 2745585
>>745529
Не стоит вкатываться в сишарп. На сишарп мало откликов. Около 50. На джаву по 200-300. Если вкатишься, что не успеешь на поезд, а ведь скоро пиздец с вакансиями докатится до твоей страны.
122 2745592
>>745585
Песню про поезд и пиздец с вакансиями я ещё в 2016 слышал. Теперь вот прям точно ВСЁ? Следующего ещё большего ВСЁ не ждать? Прям точно-точно?
123 2745613
>>745580
ну сегодня ты не сделал readonly и "пусть компилятор выведет" - завтра ты метод изменил и не учел его ридонлитость, и компилятор вывел что "он не ридонли" - только теперь ты об этом не знаешь. Так что помимо опитимизаций все эти гарантии еще проверяются - readonly, scoped кое как защищают тебя от некоторой стрельбы по ногам по причине "я ж не слон все помнить"

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

Взять хотя бы тут не раз упоминаемые делегаты и LINQ, когда передавая ламбду все хорошо, но стоит передать Method Group, так сразу "радость" GC
124 2745617
>>745266
У меня было что в линухе висит слушаемый порт, процесс вроде тоже жив, а байты будто в трубу улетают. Решилось заменой дедика то есть в моём случае была проблема с осью/железом
125 2745618
>>745580
А ты кто такой, сука, чтобы в компиляторе сомневаться?
Рофлю слегка.
126 2745631
>>745585
>>745592
по классике клоуны налетели, кек
127 2745662
>>745631

> пук

sage 128 2745914
>>745613

> завтра ты метод изменил


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

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

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

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

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

Вопрос вот в чем, шарпы используются в вебе, играх и приложениях. Душа у меня к вебу вообще не лежит, ближе к играм или приложениям(желательно играм), насколько сложно найти работу и сколько примерно займет изучение БАЗЫ для среднестатистического вкатуна?
131 2746084
>>746070

>C#, пока дается относительно легко


>но столкнулся с тем, что около половины не понимаю/понимаю плохо


Ты противоречия в своих словах не видишь?

>сколько примерно займет изучение БАЗЫ для среднестатистического вкатуна


От полугода. С учетом вышеозвученного я бы сказал год-два.
А на поиск

>насколько сложно найти работу


Еще полгода-год приплюсуй к сроку освоения. Хотя может банально повезти ну или ты согласишься работать совсем за еду (но и на такие места тоже очереди бывают)
132 2746086
>>746084

>Ты противоречия в своих словах не видишь?


да увидел, не дописал малек.
с той же базой огэ/егэ все понятно, проблемы скорее с чем-то сложнее школьного курса типа ООП, функций(в питоне они как-то легче давались)

>или ты согласишься работать совсем за еду


если будет возможность не ездить куда-то то вполне готов и так работать, стаж лишним не будет, чтобы потом устроиться на место получше
133 2746349
>>745529
На джаве порой такой легаси кал из солянки разных либ, что даже если будут платить в два раза больше, ты убежишь.
Я серьезно, повезет даже если на какой-то древний спринг попадешь.
134 2746434
>>746086

>проблемы скорее с чем-то сложнее школьного курса типа ООП, функций(в питоне они как-то легче давались)


Ну так это база и есть, а то что знаешь ты, так - букварик.

>если будет возможность не ездить куда-то то вполне готов


Залететь на первую работу сразу на удаленку, шаеес где-то 1 к 20. Даже за еду.
135 2746467
Какие направления в шарпе жизнеспособны в снг и в мире? Веб, десктоп?
136 2746471
137 2746478
>>746471
А между вебом и десктопом, что выбрать новичку?
138 2746490
>>746478
Веб.
139 2746492
А вот допустим мне надо авторизоваться на сервере, а где хранить логин и пароль? Не в текстовом файлике же?
140 2746499
>>746492
В безопасном зашифрованном хранилище кредов.
141 2746502
>>746492

>Не в текстовом файлике же?


Почему же?
142 2746511
>>746490
Глянул вакансии там написано алгоритмическая подготовка и структуры данных, не все же учить, это довольно обширная тема, что чаще всего используется в разработке из этих тем?
143 2746521
>>746511
Сортировка, поиск, списки, множества, хеш-таблицы, деревья. Ну и надо понимать алгоритмическую сложность.
144 2746523
>>746521
Спасибо.
145 2746605
>>746434
Понял, тогда постараюсь с этим буквариком дотянуть до ооп.
"За еду" в понятии наносеков это сколько? Я типа не привередливый особо тыщ 20-40 вполне хватит на первое время.
146 2746714
>>746605
Мои первые 2 месяца были 35 дальше 45 и уже вверх спустя пол года
147 2746824
>>746521

>Сортировка, поиск, списки, множества, хеш-таблицы, деревья.


Разве это не реализовано в библиотеках, а за попытки костылять вручную не выгоняют с работы ссаными тряпками?
148 2746826
>>746824
Толсто.
149 2746897
>>746714
А фриланс, как я понимаю на любом яп это веб в основном?
150 2747255
>>746824

>Разве это не реализовано в библиотеках


В библиотеках даны обобщенные решения, которые для некоторых частных случаев могут уступать в эффективности в разы.
151 2747270
Возможно ли как-то перехватить исключения, выброшенные в async void методе?
152 2747314
>>747270
Можно отловить в самом методе
153 2747330
>>747314
Это то понятно, а какие нибудь глобальные перехватчики для этого есть?
154 2747486
>>746824
Удивительно как мало это все реализовано
Сплошные велосипеды
155 2747487
>>747330
Есть но я не помню точные названия. Так и загугли их там два точно есть
156 2747509
>>747330
Перехватить чтобы обработать нельзя. Можно узнать про их существование за мгновение перед тем как твоя приложуха упадет.

https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.firstchanceexception

https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.unhandledexception
157 2747541
Теоретически возможно проверить сигнатуру вызываемого метода в рантайме и если он асинхронный пустой, то его реализацию можно подменить. Для этого берут библиотечку, которая умеет генерить ил программно и реализацию проблемного метода окружают трай кечем.

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

>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 в безопасном шарпе уготован особый котел.
157 2747541
Теоретически возможно проверить сигнатуру вызываемого метода в рантайме и если он асинхронный пустой, то его реализацию можно подменить. Для этого берут библиотечку, которая умеет генерить ил программно и реализацию проблемного метода окружают трай кечем.

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

>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 в безопасном шарпе уготован особый котел.
158 2747557
>>747509

> https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.unhandledexception


Вот это не перехватывает

> https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain.firstchanceexception


А это перехватывает вообще все, в том числе ошибки в стандартных либах. Всего за минуту после запуска приходит пара сотен исключений и понять, какое из них привело к крашу невозможно.
159 2747563
>>747541
Кек, прикольно. Запомню, как минимум можно будет на собесе мозг оппоненту вынести.
160 2747566
>>747557
Все он перехватывает. Совсем недавно с асинк войдами в пользовательском коде ебался.
161 2747569
>>747566
У меня не перехватывает.
162 2747573
>>747569
Завтра еще раз проверю.
163 2747617
Тут ведь есть эксперты wpf, подскажите, как пофиксить лаги анимации перемещаются несколько десятков картинок внутри scrollviewer ?
164 2747623
>>747617
WTF лагает. Прими это как факт. Это не пофиксить.
165 2747626
>>747623
Печаль. Видимо все таки придется мигрировать на uwp
2023-06-2823-30-53.png14 Кб, 1502x140
166 2747811
Это что такое вообще? Почему я не моуг вернуть таск типа лист?
167 2747819
>>747811
Сссссука как же заебал этот internal. Что за ублюдок рпидумл ставить его автмотом для библиотеки классов? Разве это не подразумевает, что я 999999% случаев буду использовать снаружи проекта?
168 2747823
>>747819
Нет.
169 2747854
>>747819
Не подразумевает
170 2747908
>>747557
еще есть
TaskScheduler.UnobservedTaskException
171 2747912
>>747908
Нахуя столько обработчиков плодить...
172 2747913
>>747912
чтобы ты имел больше обработчиков которые не срабатывают )
173 2747925
>>747541

>существование async void в безопасном шарпе уготован особый котел


критикуешь предлагай замену
174 2748352
>>747623
Но как так? Ведь его выпустили в 2007, когда железо было на несколько порядков слабее. И учитывая его популярность работал он нормально. А тут 2023 на дворе, мощные процессоры, мощные видеокарты, а он лагает как сука, не может простейшую анимацию с translate x плавно вывести, каждую секунду какие-то подергивания.
175 2748362
>>748352
Ах, я даже пытался делать анимацию через собственный контрол, вызывая метод onrender с помощью таймера 60 раз в секунду и рисуя картинку в нем. Но даже так меня ждали все те же микролаги.
176 2748398
А как сделать Api-реквест на удаление с параметрами запроса?

Пикрил 1 - информация о запросе в документации. Ссылка: https://cloud.yandex.ru/docs/resource-manager/api-ref/Folder/delete
Пикрил 2 - это то, что у меня работает без query parameters
Пикрил 3 - это то, как я попытался впихнуть параметр запроса "deleteAfter".
2023-06-2917-31-52.png62 Кб, 915x698
177 2748400
>>748398
Пикрил 1 отвалился.
178 2748405
>>748398
Если не ограничен в либах то советую юзать flurl. Базарю ещё захочешь
179 2748406
>>748398
>>748400
Поспешил, затупил. Забыл добавить косую черту между folders и folderId.
180 2748408
>>748405
Ок, спасибо. Ща посмотрю.
181 2748414
Суть.

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

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

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

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

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

Кто шарит, поясните, как сделать?
182 2748416
>>748414
В связи с чем такая необходимость?
183 2748419
>>747908
Не работает с асинк войдами.
184 2748430
>>748416
Ну, вот говорю же.

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

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

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

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

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

Это я сделал.

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

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

Если используешь подход fire and forget то обязан думать про "а если ошибка то что". И если не подумал то fail fast правильнее чем непонятно что
186 2748444
>>748430
А потом ты еще не просто с дженерик типами, а с коллекциями дженериков столкнешся. Похэвишь фан, как говорится.
187 2748460
>>748442

>А ловит только system.appdomain.unhandledexception


Чел, ты заебал, нихуя он не ловит.
188 2748465
>>748460
Я другой чел
И он ловит на дотнет 7 у меня
189 2748472
>>748444
А чем оно будет принципиально отличаться?

У меня есть интерфейсы:
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'ом еще сделать можно, чтобы оно работать нормально стало.
189 2748472
>>748444
А чем оно будет принципиально отличаться?

У меня есть интерфейсы:
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'ом еще сделать можно, чтобы оно работать нормально стало.
190 2748486
>>748442
В этом эвенте можно захендлить исключения с неразвернутых тасок, в момент когда уборщик мусора их диспозит.

Асинк войдовые исключения ничем не хендляться.
191 2748487
>>748460
Может кто-то их хендлит за тебя? Потому в unhandledexception'е они и не высплывают.
2023-06-2920-24-10.png7 Кб, 484x181
192 2748489
>>748405
Интересно. Алсо прихуел с неявного создания объектов в шарпе. Мне кажется это уже перебор.
193 2748498
Анончики, а как быстро в этом вашем шарпе тесты работают? Помню где-то полгода-год назад анон в мвп-треде показывал скринкаст как он запускает тесты и они буквально за пару секунд прокатываются... это +/- всегда так? А то у меня в питухоне две сотни тестов минуту-две крутятся (веб дрисня, тесты по типу "дёрни эндпоинт и сравни тело ответа с тем что должно быть", но есть десяток-другой более тяжёлых которые тестовую бд грузят), вот и стало интересно...
194 2748500
>>748489
Что тут неявного?
195 2748516
>>748500
Класс Url. Эквивалентно этому
var url = new Url("http://www.some-api.com")
196 2748521
>>748516
Тебе один из методов расширения объект вернул. Об этом явно его сигнатура говорит. Неявное это когда у тебя что-то боксится и ты про это не узнаешь, если ил не посмотришь.
2023-06-2920-59-41.png6 Кб, 869x122
197 2748526
>>748521
Какой он объект вернул? ни var, ни new ... не сообщают об этом.
Кроме того, в документации буквально написано impicitly create (пикрил).
Обычно при создании экземпляра явно указывают либо слева либо справа тип объекта. А то что ты пишешь — это уже моча уровня джава скрипта (наведи мышкой на перменную и прочитай тип), даже в бейсике такое зашквар.

Тьфу ...
198 2748535
>>748526
Обычный сахарок. Не нравится вар попроси студию указать тип вместо вара. Это делается в два нажатия.
199 2748541
>>748526
Чел. Когда ты используешь методы класса, ты так же кричишь про неявное?

Ну а хули, где там явно сказано, что за len будет?
200 2748543
>>748541

>Чел. Когда ты используешь методы класса, ты так же кричишь про неявное?


Естественно!
var имеет смысл только в одном случае — когда тебе приходится дважды писать тип класса при создании экземпляра. Поэтому ты либо пишешь var слева и тип класса справа, либо тип класса слева и просто new справа.

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

>>748535

>Обычный сахарок. Не нравится вар


Я-то поставлю, а вот другие — нет. Официально приравниваю сишарп к уровню джва скрипта (там тоже хош явно инициализируешь, хош неявно. Хош ставишь ; а хош не ставишь. Хош объявляешь переменную, хош не объявляешь).
201 2748544
>>748541
Откуда он знает, что там Url, а не string? Парсит значение. Об этом речь.
202 2748551
>>748541
Ну на первой пикче стринг визуально очевиден, на примере выше Url неочевиден (если ты не держишь в голове существование расширения). Для возврата длины предпочтительно указывать тип (особенно если учесть, что int и var имеют одинаковое количество символов). А вот на второй пикче я бы даже настоятельно рекомендовал, ибо слишком длинная простыня с НЕОЖИДАННЫМ финалом.
203 2748553
>>748544
На его скриншоте только сетапящие методы вызываются. Там еще не может быть результата. Это очевидно любому кто хоть раз с флюент шаблоном дело имел.
204 2748558
>>748543

> var имеет смысл только в одном случае — когда тебе приходится дважды писать тип класса при создании экземпляра


Да. Мне так хочется писать:
AbstractFactoryProvider<ServerBase<DefaultTcpListner, DefaultTracer, DefaultDebuger, MySecretProtocolContextFactory,MySecretProtocolMapper,MyApplicationHandler, MyMessageDispatcher, DefaultConnectionManager>> factory = GetDefauiltServerFactoryProvider<ServerBase<DefaultTcpListner, DefaultTracer, DefaultDebuger, MySecretProtocolContextFactory,MySecretProtocolMapper,MyApplicationHandler, MyMessageDispatcher, DefaultConnectionManager>>();

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

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

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

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

произойдет.

>>748551
Финал - ожидаем.
Явно указывать тип - следует только в случае, если он отличается от того что возвращает правая часть. Т.е. если бы мне надо было ICollection<IEnumerable<string>> - да, в остальных случаях - это просто мусор визуальный.
205 2748622
>>748558

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


Что здесь не так? Тут все очевидно.

>Ничего, ни у кого на ревью не возникало вопросов


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

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


Да это какое-то петросянство, которое не удобоваримо по своей структуре. Тут уже вопрос в другом.

>добавил юзинг необходимый, значит знал что делал.


Я-то может и знал, а другие вряд ли.
image.png17 Кб, 445x87
206 2748640
>>748489
Поебать
207 2748662
>>748622

>CreateUdpClient() мог бы возвратить один из 100500 вариаций ZalupaClient


И тут ты такой рассказываешь нам, каким же образом, в шарпе, один и тот же метод может возвращать разные типы.
image.png101 Кб, 1379x522
208 2749452
В общем вот, аноны, единственный способ добиться плавной анимации в впф-параше
209 2749862
>>749452
Хуйню какую-то городишь, но ничем не могу помочь — не понимаю в чем проблема. У меня картинки нормально скроллятся.

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

>>748640
>>749452

>Поебать


Глаза вытекают от этого мусора
210 2749867
>>748662
Метод визуально не сообщает какой тип он возвращает, либо вовсе возвращает object
211 2749982
>>749862

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


В чем неоптимизированность?

> Хуйню какую-то городишь, но ничем не могу помочь — не понимаю в чем проблема. У меня картинки нормально скроллятся.


Пиздишь же. Размести картинку, добавь translate x анимацию и наслаждайся микро лагами.
212 2750017
>>749452
не мучай себя. это проблема винды
где то читал на эту тему, но ссыль потерял
213 2750112
Как в шарпе сделать такое:

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

Собственно вот и проблема. Я хочу чтобы то что выбралось селектом - удовлетворяло интерфейсу. Заводить отдельный класс/рекорд имплементирующий инерфейс - не хочу.
214 2750119
>>750112
OfType<MyInterface>
.png24 Кб, 512x432
215 2750138
>>750119
Я видимо криво выразился. В IEnumerable<MyEntity> - нет объектов, которые бы имплементировали интерфейс.
Но я хочу передать то что из линку получилось дальше, при этом не создавая под это дело класс/рекорд.
Cast - кинет исключение. А надо чтобы анонимному типу - навесился интерфейс.
216 2750150
>>750112
Из коробки никак (есть парочка тухлых обсуждений фичи добавления имплементации интерфейсов анонимными классами).
Можно через левые либы.
Example2.png246 Кб, 596x600
217 2751039
Сука, имаджинируйте моё ебало, когда я узнал, что в wpf невозможно (вообще никак) сделать пикрил. Просто нет поддержки PathGradientBrush. Самое смешное, что в WinForms такая поддержка есть! Вообще, чем больше изучаю WPF, тем больше охуеваю с кучи ограничений, которых были лишены формы, появившиеся на несколько лет раньше. Ощущение, словно майки вложили в формы всю душу, а впф так, на отъебись склепали.
218 2751106
>>751039
Shape
@
Ellipse
@
Line
@
Path
@
Polygon
219 2751114
>>751106
Что сказать то хотел, анон? Как мне это все поможет нарисовать градиент как на пике?
220 2751207
А что с рекомендуемым ранее The C# Players Guide?
Я по нему начал, сделал перерыв на С, хочу вернуться - а его нет.
image.png21 Кб, 853x761
221 2751407
>>751039
В общем сделал, храни Господь создателей SkiaSharp
222 2752573
>>751207
Последняя версия плохая, предыдущие пойдет.
223 2753097
>>751039

>Сука, имаджинируйте моё ебало, когда я узнал, что в wpf невозможно (вообще никак) сделать пикрил.



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

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

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

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

>>751114
Какой градиент? Я его не вижу. Вижу только тень. Но если тебе нужно как пикрил >>751407 (говеный если что), то есть для этого радиальный градиент и его можно заюзать как опасити маску.
2023-07-0412-52-05.png54 Кб, 877x731
224 2753117
А можно сделать что-то вроде динамических enum?
Проще показать проблему. Вот смотрите пикрил, есть таблица — это список голосов говорилки яндекса.

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

Так вот, как сделать так, чтобы когда я обращался к свойству Amplua, мне IntelliSence выдавал подсказку с доступными вариантами по аналогии с enum? Я же не могу под каждый голос пилить отдельный enum? А просто массив неинформативен и потребует дополнительных действий, чтобы понять, что в нем находится и сколько. Dynamic срабатывает только во время выполнения — тоже не подходит. Tuple не подходит т.к. количество элементов у каждого экземпляра разное.
225 2753514
>>753097

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


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

> Какой градиент? Я его не вижу.


Ты слепой? У дуги начальный цвет фиолетовый, а конечный синий.

> для этого радиальный градиент


Это совсем другое. Вот 2 пика, на первом радиальный, на втором нужный мне градиент из skia sharp circular
2023-07-0418-27-48.png209 Кб, 1053x779
226 2753618
>>753514

>Ты слепой? У дуги начальный цвет фиолетовый, а конечный синий.


И? В чем проблема? На самом деле я юзал что-то вроде вроде цветового мэша (не помню точно как называется), но колорпикер выполнет полностью стандартными средствами
227 2753629
>>753117

>Так вот, как сделать так, чтобы когда я обращался к свойству Amplua, мне IntelliSence выдавал подсказку с доступными вариантами по аналогии с enum?


Такие вещи не хардкодят.
Ты там собираешься отдельную ветку кода для каждой локали городить что-ли? Это хуевый подход.
228 2753670
>>753629
В смысле хардкодинг? Если взять выше прикрепленную таблицу за основу, то у меня есть набор пикрилейтед №1. Основной класс Voice, он представляет строку в таблице, и есть энумы типа пола, амплуа. Единственное нет кода языка — у яндекса он пишется через дефис, а это гемор через конвертеры, чтобы сериализовать в json. Хочу чтобы я пришел через миллион лет и не сидел перебирал возможные варианты и гуглил доки.

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

А как еще? Всё в стрингах держать?
Пока что свою проблему решил через xml документацию к каждому голосу (пикрил 2), чтобы примерно представлять что где лежит, но решение так себе.
229 2753680
>>753618
Ты уж постарайся вспомнить, потому что мне реально интересно, как получить такой эффект на чистом впф
230 2753793
>>753680
да нагугли ты что то готовое
типа этого https://github.com/PixiEditor/ColorPicker
и посмотри код
16482202601-kartinkof-club-p-ya-nichego-ne-ponimayu-mem-1.jpg27 Кб, 604x341
231 2753843
Антоны, помогите вкатуну.
Стараюсь написать консольное приложение - простенький конвертер валют в котором нет динамического выбора валюты, а курс валюты строго задан заранее.

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

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

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

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

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

Да и в целом в фотошопе сделано ровно тоже самое. Причина проста — производительность. Эти градиенты очень прожорливы. Тоже самое и гарадинет Saturation и Lightness созданы при момощи трех слоев - базовый цвет + растровый градиент насыщенности + растровый градиент яркости повернутый на 90 градусов.
image.png8 Кб, 466x101
234 2753891
>>753843

> почему оператор * не применим к типу double?


Что прости?
235 2753902
>>753843
Берешь Console.ReadLine(), то что он вернет парсишь Double.Parse(), это значение умножаешь или делишь на что ты там хочешь. Не забывай, что пользовательский ввод может быть хуевым.
236 2753950
>>753902

>что он вернет парсишь Double.Parse()


да чтоб тебе зарплату такой программой считали
237 2753962
>>753950
Чел, он кодить учится, а не на собес в финтех готовится.
238 2753964
>>753962
тогда хреновый с него программист
ибо ПРОГРАММИСТ должен знать о проблеме float/double, а не вакуумносферический финансист.
239 2753969
>>753964
Итт нет программистов. Только макаки и домохозяйки с чсв. Так что не беда.
240 2753975
>>753670

>В смысле хардкодинг?


Вот то что у тебя на 2-м пикет самый натуральный хардкодинг и есть. Ты даные не только в код пихаешь, но и еще и по комментам размазал. Пиздец.
Все что на пике должно где-нибудь в БД лежать, на крайний случай в конфигурации. А в самом коде тебе дожно быть до пизды какое амплуа, в каком голосе лежит. Ты с абстракцией должен работать.
241 2754155
>>753969
Прям таки с чсв.
Мимо бейсико-домохозяйка.
242 2754157
>>753975
Да, логично. Спасибо.
243 2754184
>>753975
А в каких случаях употреблять enum? Где грань между харкодингом и перечислением констант?

И второй вопрос: как за собой тащить конфигурации, если делаешь библиотеку? Добавлять файлы в ресурсы — глупость и своего рода тот же хардкодинг.
244 2754194
>>753964
Ты дурачок бля, я говорил что я программист? Я сказал, что я вкатун. Начал вкатываться через шарп буквально пару - тройку дней назад. Успокойся пжлст.
245 2754227
>>753975
Запихнул в джейсон файл и десериализую в класс Voice.
Файл копирую при сборке как внедренный ресурс в условную папку Data. Дальше юзер библиотеки сам хочет вручную созадет экземпляр Voice, хочет десериализует файл.

Как-то так. И самое главное, вопрос о выборе итемов отпал сам собой, если эти данные привязать к UI.
2023-07-0501-23-02.png34 Кб, 549x653
246 2754228
247 2754235
Есть идеи каким образом было озвучено видео?

https://youtu.be/1hmUZx8DIWo
Хачатуру платить 500р влом. Я видел в яндекс клауд SpeechKit Brand Voice возможность создавать собственные голоса, но там похоже речь идет о небольших фразах или вставках в уже готовые сегменты аудио.
2023-07-0502-10-21.png375 Кб, 570x623
248 2754236
>>754235

>Хачатуру платить 500р влом.


В итоге там будет "установите мою программу" без cmd, смс и регистрации.
249 2754241
>>753793
Я как раз знаю, как это делают обычно - по твоей ссылке просто готовая картинка используется, потому и спрашиваю.
250 2754242
>>754235
so-vits-svc

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

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

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

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

Само градиентное поле выбора тоже фейковое и состоит из послойно накладывающихся друг на дурга градиентов. Одна из причин, почему рядом всегда есть окно, отображающее истинный цвет.
.mp473 Кб, mp4,
254x316, 0:04
251 2754310
>>754242
Canvas у которого BackgroundBrush это хитрый VisualBrush, у которого внутри Rectangle с LinearGradientBrush + OpacityMask. У Canvas один чайлд - кружочек, который по MouseMove по этому канвасу двигается. Вроде нет никаких проблем с фепесами.
252 2754318
>>744390
>>745506
Тогда, что посоветуешь для изучения именно в области WPF? Или по самому ядру .NET? Какие конкретно книги?
253 2754336
>>751039
В плане брашей, впф просто маппит функции Direct2D. Так что все вопросы к разрабам DirectX тоже майкам.
254 2754347
>>754310

> Canvas один чайлд - кружочек, который по MouseMove по этому канвасу двигается. Вроде нет никаких проблем с фепесами.


Можно наследоваться от canvas, переопределить onrender и рисовать кружочек в drawingcontext, так должно быть еще эффективнее.
Без названия (1).jpeg6 Кб, 292x173
255 2754426
Отрыл HH с вакансиями. Какое же говно, ничего нет, все хотят милд+/синиор за 150к, ИП Хуйсосян Маможонович со своими интерсными проектами в области прожарки люля. Зачем я начал вкатываться в это говно, работу никогда не найти. Надо было питон учить и на собесах двигать тазом.
256 2754437
>>754310
Возможно, но ты еще не добавил кучу говна, типа окна расширенной цветопробы, и списка цветовых каналов в разных цветовых схемах RGB, HSB, HSL, HEX, обновляющихся параллельно с передвижением курсора.

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

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

Алсо, просто интересно, ты решил проблему со скругленными углами твоего градиента? Я тоже пытался так делать, но было либо сложно, либо нелогично выставить ноль\максимум в этих самых углах. Я от радиусов отказался в итоге.
257 2754446
>>754426
Что мешает выучить и его? На самом деле питон лезет из всех щелей, тоже подумываю к нему приобщиться.
258 2754450
>>754426
Так учи питон в чем проблема?
Перекат из языка в язык дело месяца-двух.
Хоть и сложно даунгрейдиться до питона, но раз бабло нужно то в путь, а вообще за баблом иди в 1С, там его тонна и тележка.
259 2754452
>>754446
>>754450
А нахера я тогда проебал время на этот кал
260 2754454
>>754452
Некоторые питонисты наоборот изучают шарп. Стремление к неизведанному и выстраивание иллюзий — это нормально.
261 2754461
>>754454
В пизду, пойду на сво, посижу по максимуму на 2 сотыги, потом отпилю себе ногу и буду сычевать на пособиях. Не хочу я больше вкатываться.
262 2754463
>>754452
в смысле проебал?
если ты чисто за баблом идешь, то зачем тебе что-то кроме 1С ?

ИТ это вечное обучение и для людей которым это нравится, за исключением какой-нибудь легаси поддержки в швейцарском банке где ты еще перфокарты ворочить будешь (не шутка)
263 2754468
>>754463

>если ты чисто за баблом идешь


А зачем ещё нужна работа бля? Если бы я был миллиардером я бы плавал в батискафе смотреть на Титаник.

>1С


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

>вечное обучение


Невозможно бесконечно обучаться. Во-вторых, что значит обучаться? Сидеть по 10 часов в день? Я тебя умоляю никто этим не занимается, иногда пощупаешь новую приблуду, почитаешь доки мельком, если есть конкретные задачи можно почитать плотнее. Это несоизмеримо проще чем вкатываться с нуля. Кто в разработке работают, тоже самое говорят, ну пощупаешь фреймворк новый, где-то подчитаешь что-то.
264 2754480
>>754461
Очередное выстраивание иллюзий по неизведанному. Ты думаешь, что отпилишь себе ногу сам, но на самом деле отпилят тебе жопу .

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

Только "разведка территории" поставит твои мозги на место. Изучай питон и возвращайся.
265 2754524
>>754480
После этого поста я точно понял, что на шарпе сидят сумасшедшие.
266 2754527
Правильно ли я понимаю, что если объект А имеет ссылку на объект Б, который имеет ссылку на "постоянный" (например это свойство главного класса) объект В, то после того, как все ссылки на А и Б будут удалены, они будут собраны ГК?
267 2754534
>>754527
да. кого удерживают объекты - не имеет значения
важно чтобы не удерживали ИХ
268 2754559
>>754524
ну тут такое дело
уже сидящие на шарпе они нашли где им его применять и денежку загребать
И в общем то они не в курсе ситуации с поиском заработков.

лично я зарабатываю на шарпе, но знаю и активно использую питон также.
image.png26 Кб, 1147x183
269 2754590
хочу скрыть тайтл бар у окна, но пока удалось только всё сломать, как фиксить?
270 2754593
>>754590
дык простой скрой
а начинать нужно про что вообще речь
ибо убрал аттрибуты окна в впф просто выставить одно свойство.
271 2754650
>>754590
WPF? Неправильно делаешь.

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

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

Во-вторых шатай Style для определения визуального стиля UI-элемента.
Если захочешь сделать свой кастомный хидер с функцией перемещения окна и т.д., то ради бога не используй таймеры и прочее говно. Используй Behaviors.
272 2754664
>>754593
>>754650
а вы знали, что сися - это не только впф?
273 2754667
>>754664
ты дурачок что ли?
потому и сказал что нужно говорить О ЧЕМ РЕЧЬ
274 2754675
>>754667
чмо безмозглое, я же скинул скрин где я вызываю вин апишную функцию
275 2754689
>>754675
бестолочь, и что этот вызов должен был сказать?
может ты просто дурачок (а на это вполне похоже ибо строишь из себя и считаешь что все вокруг должны быть телепатами которые разбираются в твоем безумии), что не знает как делать штатно, и поэтому делаешь через винапи
276 2754694
GDI32
277 2754793
>>754650

> Если захочешь сделать свой кастомный хидер с функцией перемещения окна и т.д., то ради бога не используй таймеры и прочее говно. Используй Behaviors.


Есть же windowschrome. Можно указать любой размер хидера, он будет прозрачным и за ним можно любой контент располагать.
278 2755257
Раз уж тут такие переисполнение по впф челы сидят, хочу спросить.

Если ли способ способ закрыть/выгрузить/задиспозить впфшный Page. Пусть даже способ хаковый. Условие - я не владею впфшным Window, которое этот Page хостит. Ни ссылки, ни малейшего намека, где это виндоу находится нет.
279 2755258
>>755257
Через WinAPI.
280 2755269
>>755258
Что-то типа FindWindow и перебрать конпки, кока не найдется крестик? Это совсем не то.

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

Вот я и подумал, может есть впфшный хак, как объект Page саботировать. Там же целая история с наследованием в рамках фреймворка.
281 2755287
>>755257
зачем вообще использовать Page
282 2755309
>>755287
Есть интерфейсный метод, который возвращает FrameworkElement кажется. Во всех гайдах это либо Page, либо UserControl. Я пробовал туда Window отправить, но получаю исключение. Что-то вроде "виндоу не может находится в иерархии так низко". Ну понятно, что там свое окно, которое хостит всякие FrameworkElement'ы типа Page. Вот только к этому объекту окна, чтобы вызвать на нем Close, не подобраться методом апишки приложухи, которая использует этот впфшный механизм.

Может есть хитрый вариант что-то к чему-то привести в рамках типов впф и дернуть на этом какую-нибудь херню, чтобы все посыпалось нахуй?
283 2755487
>>754793
Я его использовал для возможности изменения размеров в режиме WindowStyle=none. Не знал про хидер.
284 2755519
>>755309

>Я пробовал туда Window отправить, но получаю исключение.


>Ну понятно, что там свое окно, которое хостит всякие FrameworkElement'ы типа Page.


Естественно, Window не является UI-элементом.
Кстати Page тоже своего рода исключение из поведения других контролов, это бяка характерна тем, что изолирует контент внутри себя. Нужно очень постараться, чтобы найти применение ему — например, если у тебя какой нибудь браузер. В любых других ситуациях нужно наследовать другой контрол.

>Есть интерфейсный метод, который возвращает FrameworkElement кажется.


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

>Все что мне нужно, выгрузить Page самостоятельно, заранее. Но вот беда на нем нет ни Dispose, ни Close, ни Unload. Нихуя.


Во-первых, ты должен сам реализовать интерфейс IDisposble с методом Dispose, где ты выгружаешь всю потенциальную бяку, мешающую CG добить твой контрол. При событии Uloaded будет автоматически вызван Dispose (должен).
285 2755540
>>755269

>При событии Uloaded будет автоматически вызван Dispose (должен).


Точнее ты подписываешься на событие Page.Unloaded и оттуда вызываешь метод Dispose.

Какие элементы мешаю помереть Page? Что именно как ты пишешь

>Однако делает она это плохо и все идет по пизде.


?
286 2755797
>>740238 (OP)
Почему локализация в WPF'е это такой пиздец?
Неужели нету лучшего способа чем выносить абсолютно все строки с UI в код бихайнд и биндить их?
287 2755820
>>755797
Есть же файлы ресурсов, к ним биндишься через x:Static
288 2755823
>>755820
И нихуя не работает - в рантайме после запуска окна не переключишся как с обычными строками, нужно задавать культуру перед инициализацией компонентов и срать пользователю окошко о том что ему нужно перезапустить приложение.
image.png12 Кб, 827x61
289 2755855
без хуесосов осилил короче
290 2755884
>>755855
Обращайся.
291 2755916
>>755855
Винапи это сишный интерфейс, а ты приперся в тред веб-макак которые знают только HTTP200.
292 2755922
>>755916
активно использую винапи в WPF
но когда в тред приходит чудо которое вываливает "догадайтесь че у меня" и еще ведет себя как быдло, то правильно послать его
293 2756043
>>755797
Локализацию лучше вообще хранить в xml или json, а потом десериализовывать в словарь ресурсов.

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

>>755922
Как в случае с темой 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 части.
294 2756052
>>756043
Ссылка >>755922 случайно прилипла. Текст относится к теме постов по первым двум ссылкам.
2023-07-0614-16-25.png69 Кб, 1340x745
295 2756081
>>756043
Примерная схема
2023-07-0614-25-51.png46 Кб, 1368x893
296 2756097
297 2756600
Похоже, что мои ожидания по поводу помощника в студии были преувеличены.

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

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

>Page изолирует контент внутри себя


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

>Я не совсем понимаю. Метод возвращает FrameworkElement тебе или домену?


Я регистрирую свой объект, на котором реализован интерфейсный метод. Приложуха сама вызывает этот метод и получает объект Page, на котором живет контрол webview. Вот это вебвью корень всех зол. Капризная хуйня, которая не терпит одновременного существования других оболочек над хромом. Это причина по которой я ищу варианты приканчивать свой Page. Разумеется можно вызвать Dispose на webview, однако это нерабочий вариант, потому что с точки зрения приложухи Page продолжает оставаться валидным объектом, а реинициализировать вебвью на том же Page, к сожалению, невозможно. Поэтому нужно похерить не только контрол, но и хост этого контрола. Чтобы приложуха запросила у меня новый Page.
299 2756665
>>756621
А что будет, если ты изменишь содержимое экземпляра Page, который ты отправил в приложуху? Будут ли фиксироваться изменения в этом приложении?
300 2756689
>>756665
В этом Page кода кот наплакал. В разметке единственный контрол, webview, в гриде растянутый на все окно. В cs код правильной инициализации этого контрола. Вот и все. Я не большой знаток wpf, на мой взгляд страничка ведет себя вполне типично. Окно, которое ее хостит, себя никак не проявляет.

При некоторых внутренних сценариях приложуха убивает эту страничку и просит у меня новую. То что старая помирает, я понимаю потому что подписан на Unload, в котором диспозится webview. Однако как этот Unload вызвать самостоятельно я без понятия.
.jpg1 Мб, 2894x4093
301 2756696
Анончик, смотри. Есть условие: надо получить информацию о количестве активных телефонных разговоров в час-минуту за сутки.

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

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))))

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

Есть какие-нибудь сервисы для упрощения вот таких вот монструозных условий?
302 2756702
>>756696
Ну. Сейчас вижу, что чутка можно упростить

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

Все еще выглядит монструозно.
303 2756746
>>756689
Если ты у себя в экземпляре Page очистишь содержимое Content, то в хосте это тоже очистится?

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

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

У вас же тут ниче крутого в принципе не существует. Куча фич, но кто-то вообще их использует? Еще расскажите как вы коллекции кортежей юзаете или что-то подобное, это просто курам на смех.
305 2756751
>>756747
Ты с инопланетянами общаешься? Ты ведь даже не знаешь какие у кого задачи.
306 2756776
>>756747
Я вот хочу перекатиться в няшный шарпик из блевотной жабы. Пыху вообще языком не считаю.
307 2756782
>>756776
Лол, зачем с говна на говно? Любишь говно? Говноед-шарпо-джаво-блядун? Вот это микс!!!
308 2756789
>>756746

>если надо очищать Page, который запустит Unloaded webview


Просто скажи куда нажимать, чувак. Я завтра попробую.
309 2756791
>>756747

>для роботов каких-то


Все мы биороботы, чел...
.jpg355 Кб, 700x700
310 2756815
>>756747
Ну. Давай я расскажу.

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

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

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

Собственно. Вот так я и полюбил шарп. Да. Шарп это комфорт, шарп это жизнь. И даже, если сейчас, я старый хуй, который и на плюсах пару лет поработал, и в жаву наступил, и даже поддерживал код на ебучем ПХП, я все еще считаю, что шарп - это любовь, жизнь, процветание. Единственно чего бы я хотел для шарпа - это отвязку от майков, какой-нибудь Open.NET. А так - шарп - любовь. Да.
.jpg355 Кб, 700x700
310 2756815
>>756747
Ну. Давай я расскажу.

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

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

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

Собственно. Вот так я и полюбил шарп. Да. Шарп это комфорт, шарп это жизнь. И даже, если сейчас, я старый хуй, который и на плюсах пару лет поработал, и в жаву наступил, и даже поддерживал код на ебучем ПХП, я все еще считаю, что шарп - это любовь, жизнь, процветание. Единственно чего бы я хотел для шарпа - это отвязку от майков, какой-нибудь Open.NET. А так - шарп - любовь. Да.
311 2756817
>>756782
Люблю конфеты, потому и хочу шарпик. Жаба - говно, да. Пхп и другая пыхоплеяда - понос вперемешку с мочой и блевотиной.
312 2756928
>>756815
Всё то же что ты описал есть в PHP, кроме того что он привязан к вебу - единственный недостаток. В PHP даже ООП шире и ярче играет, чем в Шарпе или Жабе, оно тупо удобное. И объявление переменных моё любимое конечно.
313 2756946
>>756789
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). Это надо учитывать.
314 2756948
>>756946
Grid myGrid = new();
myGrid.Children.Add(new Button())

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


фикс
2023-07-0700-15-36.png17 Кб, 668x208
315 2756987
Вы только посмотрите на это говнище, оно просто мусорит мое окно ошибок. Что я могу поделать, если интерфейс ICommand требует реализацию CanExecuteChanged event, но мне оно не требуется?

2023 год @ искусственный интеллект тебя заменит.
316 2757051
>>756747
>>756928
пхп не уместно сравнивать с сисей, учишь сисю = можешь писать, что угодно с кайфом, учишь пхп = сосёшь хуй в вебе и кидаешься калом на сосаче
317 2757121
Есть вьюмодель, у неё есть несколько bool свойств.
На вью есть несколько панелей, видимость которых должна зависеть от комбинации этих свойств.
Как это сделать?

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

Я думал можно сделать что-то типа такого:
<Binding Converter={BooleanToVisibilityConverter}>
____<Multibinding Converter={BooleansToBooleanAndConverter}>
________<Binding Path=Prop1/>
________<Binding Path=Prop2/>
________<Binding Path=Prop3/>
____</Multibinding>
</Binding>
Но так нельзя.
318 2757135
>>756747

>В PHP всё гораздо проще и удобней, сделано для людей


ох насмешил. ладно бы хоть питон был, но пхп...
319 2757169
>>757121
ну делай обычный конвертер, какая проблема
320 2757393
>>740238 (OP)
В треде есть некроёбы?
У меня случилась просто неведомая ебаная хуита:
Делал я когда-то один небольшой проект пару лет назад, и тут заказчик внезапно ожил и попросил допилить небольшую фичу. Открываю проект - студия говорит что 4.5 фреймворк на котором был проект уже выпилили и вот бери обновляйся. Я без задней мысли обновился на 4.8, начал пилить фичи, попутно их тестил, все было норм. Затем когда допилил, решил что стоит пройтись по всему проекту на всякий случай и тут почалось. В месте где идет обращение к XmlSerializer (System.Xml) вылетает эксепшн:
Не удалось загрузить файл или сборку "Проектнейм.XmlSerializers, Version=Версияпроекта, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл.
Причем в том месте я вообще никаких изменений не делал.
В проекте он присутствует, вскрывал дотпиком новую и старую версию - библиотека 4.0.0.0, идентичная.
Далее еще интереснее - у меня есть этот же проект, с обновленным фреймворком, но без изменений и если его запустить в дебагере - он тоже выдает эту ошибку, но если запустить просто exe в папке debug - он нормально работает. Но с измененным проектом такое не работает.
И если поменять название в свойствах сборки он вообще не запускается и выдает ошибку как выше только уже не пишет какую либу он не может загрузить. И дальше начинает спамить что поток не может получить доступ к объекту другого потока пока не словит стековерфлоу.
Кто-нибудь встречался с подобной хуитой?
Сегодня я конечно еще попробую создать совсем новый проект и руками перетащить файлы туда, и возможно потыкать разные версии фреймворка, но я не уверен что это поможет.
321 2757441
Закрылся тикет https://github.com/dotnet/wpf/issues/438

Это они че, спустя столько лет, добавили наконец этот диалог выбора папки? или че вообще
322 2757645
>>756747
Одебиливший от динамикодрисни скриптозависимый вебпарашепыходебил, спок
323 2757852
>>757441

> The WinForms dialog in .NET Core uses the newer API already


Ясно. Как обычно, нужно просто юзать няшные винформы вместо костыльного WTF.
324 2757942
>>756946
Спасибо за ответ.

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

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

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

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

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

>>758166

>Как же хорош всё-таки PHP. ООП кайфовое,


ты бы попробовал протрезветь. ооп у него хорошее лол. да одних __get/__set хватает чтобы охренеть
так что удаляйся ты сам и вали в тред пхп
че вообще пришел лол
327 2758176
>>758169
Насрать вам в тред спецально. А что ??
328 2758180
>>758176
смешная попытка. тут как бы и пхпшники сидят
вот я пхпшник еще со времен пхп 3 (на пхп уже СЛАВА КТУЛХУ не пишу, но приходится поддерживать проекты пхп 7)
так что твои потуги для меня выглядят смешно
329 2758392
>>758169
В чем профит UserControl'а по сравнению с Page?
330 2758405
>>758169

> да ты крут. я за десятки лет не знаю нахрена нужен Page если есть юзерконтрол


Для навигации внутри фрейма.
331 2758419
>>758392
это просто контрол. самый обычный контрол, с которым просто работаешь и не мудришь костыли. навигация делается элементарно и как угодно.
А вот с фрейм+пейдж какая то пляска с бубном
332 2758421
>>740238 (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? но ее не видно. Хотя она есть в исходном коде страницы и в сохраненной копии из гугла. Отключил блокировщик рекламы. В чем может быть проблема?
image.png68 Кб, 984x569
333 2758549
>>758421
В том что ты не очень умный
334 2758610
>>758549
Ну и зачем они удалили это из новой документации? Дебилы.
242422442.png13 Кб, 857x204
335 2758743
>>753891
Вот что.
336 2758747
>>758743
Код показывай
Безымянный.png109 Кб, 1920x1080
337 2758752
db59ftDbX1b-R3BIVJGmgiHcFzerSRewJmTR--HOeOtjfggvaLV5S2DkJ8dFEbyF28SWYJW8hTub7c5bNtY5o.jpg90 Кб, 576x768
338 2758756
Поясните, кому не в лом, какой аспект языка делает работу на C# настолько проще, что можно позволить себе не использовать C++ ?
339 2758762
>>758752
В текстовом виде
341 2758766
>>758762
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.");

}
}
}

Нахуя?
342 2758773
>>758765
Видос очень тяжело смотреть, хуесос за кадром пять минут тянет сиську под смешные картинки а мыслей интересных нет.

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

Verilog/VHDL
Asemmbler
C
C++
Bash
Python

Что я нахуй буду делать с шарпами. Игры писать?
343 2758775
>>758766
А теперь в бинарном...
344 2758784
>>758773

>Что я нахуй буду делать с шарпами. Игры писать?


То же что и с

>Verilog/VHDL


>Asemmbler


>C


>C++


>Bash


>Python


как работодатель скажет, на том и будешь писать, и на шарпе и на бейсике будешь, никуда не денешься, раб_отник на раб_оте.
345 2758786
>>758773

>Видос очень тяжело смотреть, хуесос за кадром пять минут тянет сиську под смешные картинки


Тебе скорость на 1.5 не поставить?

>>758775
Иди на хуй, пёс подзаборный.
346 2758788
>>758786
Я старый 30 летний дед скуф.
Мне физически уже тяжело смотреть видео со смешной подачей. Особенно, когда нихуя не смешно.
Я этого говна наелся и меня от него воротит. Это ебаный кринж.
sage 347 2758790
>>758743
Жабоскриптера видно издалека.
348 2758795
>>758786
Твоя хуйня не компилируется! У тебя не может быть бинарника с кодом! Как я тебя подъебал, а? а? а?
16818366683610.webm1,8 Мб, webm,
1280x720, 0:04
349 2758800
>>758790
Единственное что я написал на жабе было "Hello World!" в 2016 лол.

>>758790
Ты ебанашка. Я вкатываюсь неделю. Я сути твоего подъёба даже не понял.
350 2758802
>>758766
Какой тип у тебя в data?
351 2758810
>>758752
Тебе прямо написано что нельзя СТРОКИ умножать на ДЕЦИМАЛ, что ты вообще ожидал от этой операции?
Второй случай тоже туповат, скасти одно из чисел к типу второго операнда
352 2759230
>>753850
>>753902
>>758790
>>758795
>>758802
>>758810
Всё короче, написал. Конвертер трёх знаковых валют в консоли с курсом прямиком из 2007 года (который никто никогда не вернёт) (но я хотя бы попытался). Сам, без чей либо помощи и не списывая с других. Нужно было просто как следует разобраться в типах данных, посидеть и подумать немножко.

Пиздец вы спецы. Не смогли мне, вкатуну, объяснить как написать консольную хуйню уровня первоклашек. Чего там парсить? Чего там скашивать? Всё же просто как в аптеке. Я с вас в акуе короче, двощеры блядь. Но всё равно, спасибо.
353 2759231
>>759230
Обращайся.
354 2759232
Что именно следует знать и уметь по докеру для .net? Что можно почитать/посмотреть? Статьи в документации должно хватить?
355 2759237
Ребята, а правда в разрабом щас хер устроишься? Я за всю свою карьеру проблем никаких не испытывал просто и диву даюсь с того, о чем тут и в ебаном пишут. Лайвкодинги какие-то, тупые вопросы, постоянное изучение технологий…

Сижу на одном и том же ЯПе, в доку по фреймворку заглядываю максимум раз в неделю.
356 2759240
>>759232

Наверн достаточно знать отличия цмд от ентрипоинт. Тыж шарпист, а не девопс.
357 2759241
>>759230
подсказать не можем (ты ж не слушаешь)
можем только обосрать

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

>>759237

> Сижу на одном и том же ЯПе


> постоянное изучение технологий


Развитие это часть работы как бы

> Лайвкодинги какие-то, тупые вопросы


> хер устроишься?


Актуально для джунов
97685675467 (2).png22 Кб, 1566x184
359 2759246
>>759241

>1


И что с того?

>2


Не понял тебя.

>3


Приложение крашнется

>4


Приложение крашнется. Ты кстати в обменном пункте тоже покупаешь или продаёшь не 50 баксов, а 56.8?

>5


После какой запятой?

>6


Не знаю. Ругается чёт и выводит ошибки.
360 2759248
>>759241

>Уффф, у меня от такого рак жопы обострился


В смысле? Чё не так то?
361 2759252
>>759245

Прости, я не в тот тред свой пост отправил. Хотел в МВП-тред.
362 2759263
>>759246
1 поймешь сам когда через год посмотришь на свой код. Ну или коллеги по работе (хотя о чем это я) тебе расскажут...кулаками
2 все это словоблудие можно было оформить словарем валюта-курс и в цикле красиво пройтись
3 как и твоя зарплата
4 в обменном пункте поле мне ЗАПРЕЩАЕТ ввести не то, консоль же позволяет ввести что угодно.
5 деньги это 2 знака после запятой. дальше не очень интересно. дабл же выведет тучу знаков. хот бы округлил до 3 знаков
6 ругается на то что стринг и децимпал перемножаешь? не пробовал децимал * децимал? чет с даблами и интами тебе не мешает перемножать, а с децималами какие трусы стринги у тебя
363 2759277
Рэйт мой говняк раз уж такое пошло
09090087.png113 Кб, 1920x1080
364 2759284
>>759263
Бля, пчел... Ты такой важный прям пиздец. Еще раз мой пост прочитай. >>753843 Требовалось написать простенькую, консольную хуйнюшку.

>Ну или коллеги по работе (хотя о чем это я)


Ты о том, что я типа работу себе не найду. Все вы айтишники токсичные, аж пиздец.

>коллеги по работе тебе расскажут...кулаками


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

>2


Ок.

>3


Оййй бляяя... сукааа рукалицо. Токсик ты ёбаный.

>4


Ок.

>5


Не понимаю тебя, но ок.

>6


Не даёт мне среда разработки создать переменную с decimal с нужным мне значением. Подчеркивает красным. Вот видишь? Всё исправил на Децл, но всё равно ошибка, а что это за суффикс "М" я хз.
365 2759288
>>759284

>написать простенькую, консольную хуйнюшку.


если ты не знаешь базовых типов и зачем они нужны, то ты даже не ждун

>Ты о том, что я типа работу себе не найду. Все вы айтишники токсичные, аж пиздец


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

>3


а ты учись сразу быть правильным программистом. иначе че сюда пришел?

>Не понимаю тебя, но ок.


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

>Не даёт мне среда разработки создать переменную с decimal


ну добавь ты м. жалко что ли
а так среда думает что ты децималу пытаешься присвоить дабл
366 2759290
>>758788

>Я старый 30 летний дед скуф.


>30 лет



Старость, пиздец.
367 2759293
>>759277
Ну я так не умею еще. И тем не менее на выходе у меня получилось симпатичнее чем у тебя :3

>>759288

>то ты даже не ждун


Естественно я не ждун. Я ничего и не жду. Я действую, бро.

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


Блядь, так и не использовал децимал. У меня изначально дабл было.

>ну будь реалистом. пусть результат будет все таки округлен. ну хотя бы до 6 го знака для особых любителей резать коейки на части.


Я не знаю как округлить. Да и зачем? У меня ведь всё равно получилось так, как в настоящем конверторе.

>ну добавь ты м. жалко что ли


а так среда думает что ты децималу пытаешься присвоить дабл
Да, добавил. Теперь нет ошибки. Спасибо.
368 2759298
>>759293

>Я ничего и не жду. Я действую, бро.


действовать нужно в правильно направлении. иначе зачем

>Блядь, так и не использовал децимал. У меня изначально дабл было.


А ЧЕ? если речь идет про денежку (которой тебе никогда не видать) то сразу нужно децимал. в общем то он для этого и придуман

>Я не знаю как округлит


бедный человече забаненный в гугле. Зачем? ну давайв мгазе требуй "а где тысячные в сдаче? вы тут охуели что ли"

>Да, добавил. Теперь нет ошибки. Спасибо.


А неважно. камень в твой огород заготовлен (иначе бы я спал) так лови.
369 2759300
>>759277
1. Сокращения. Нахуй и в пизду. Пиши полностью.
2. new() - лучше только для инициализации полей класса, в остальных случаях нихуя не очевидно что там за new
3. Копипаст, который можно было заменить goto
4. Магические числа
5. var в результатах математических операций - я бы уже позвонил хрюше и стал просить нового джуна искать
6. Копипаст
7. Парсинг зависящий от культуры, вместо того чтобы сделать универсальный парсер, который от этой самой культуры не будет зависеть
8. Листы там где лучше подошел бы словарь

Но да. Ты хотя бы стараешься и как минимум автоформатирование настроил. Это плюсик и я уже тебя не ненавижу.
370 2759303
>>759300

> goto


ебанутый...
как тебя вообще серьёзно то воспринимать после такого?
371 2759311
>>759303
ну есть 2 случая когда готу реально рулит (я правда их не помню, но точно они есть - один из них break N а второй не помню)
так что он не совсем ебаунутый
.png8 Кб, 476x273
372 2759325
>>759303

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

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

Короче. Если goto делает код лучше - использовать я разрешаю.
.jpg63 Кб, 756x726
373 2759330
>>759303
Как майков можно серьезно воспринимать после такого? Срочно отказываемся от использвования стандартной библиотеки дотнета и переписываем без goto
374 2759340
>>759330
покажи мне break N без готу и я это обосру )
375 2759344
>>759330

>удалить


>запритить


Всегда знал и говорил, что Майкрософт - оплот свободы в этом мире рабства. Лишний повод пользоваться только их продуктами, хотя оно и так очевидно, альтернативы лютое говно: винда, офис, студия, что ни возьми, одни блистательные вины от подобий которых от других только блевать тянет от убожества, хуже китайских подделок.
b55fa50b-f9c3-4376-ace3-7b9b38d55722.jpg46 Кб, 735x412
376 2759373
377 2759572
>>759344

>Майкрософт


Лидер по количеству опенсорс проектов.
378 2759622
>>759572
А хули не опенсорсить, если одна половина мира сотрудники микрософт, а другая его клиенты. Тупо упрощение и удешевление процесса разработки. Они где-то там внизу конкурируют между собой, непрерывно перетекая из одной группы в другую...
379 2759662

>да ты крут. я за десятки лет не знаю нахрена нужен Page если есть юзерконтрол


Лично я столкнулся с отличиями когда пытался забиндить какой-то экземпляр к свойству собственного класса на базе Page. Чтобы я не делал, но элемент внутри тупо отсутствовал. И добродушный анон подсказал в чем особенность. Вот, передал так сказать знания по наследству.

>>758392

>В чем профит UserControl'а по сравнению с Page?


Скорее наоборот. Юзер контрол это просто минимальная(почти) основа для твоего контрола. Ничего не мешает делать свой контрол на основе Grid, к примеру.

Особенность Page в изолированности содержимого, часто это используют для безопасности в браущерах, чтобы случайно какое-то говно не пролезло наружу или внутрь.
380 2760135
>>756987
pragma warning disable не думал использовать, умник хуев
381 2760144
>>756987

> Что я могу поделать, если интерфейс ICommand требует реализацию CanExecuteChanged event, но мне оно не требуется?


Использовать готовые mvvm либы, а не писать велосипеды
382 2760358
>>760144
Так чё, в реализациях готовых MVVM-либ забивают на варнинги?
383 2760400
>>760358
Ненужные варнинги отключаются одним кликом мышкой, причем локально для нужного кода.
384 2760401
>>756987
Реализуй его явно, делов то
385 2760739
Такая проблема. Допустим есть два разных класса из двух разных библиотек, написанных в разное время. У них есть по интерфейсу, где есть пересекающееся по сути свойство, но по разному названное. К примеру

public interface IHuinya
{
. . . int HuinyaCount
}

public interface IDrugayaHuinya
{
. . . int DrugayaHuinyaCount
}


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

но не может удовлетворить из-за конфликта имени, даже если я переименую в пользу одного из интерфейсов. В бейсике я мог указать явно реализацию, что-то вроде
int Count : IDrugayaHuinya.DrugayaHuinyaCount, IHuinya.HuinyaCount
И тогда не важно какое имя в классе. А как быть с этим в шарпе?
386 2760752
>>760739
На сколько знаю только враппер писать
image.png45 Кб, 490x553
387 2760756
388 2760901
>>760756
А, вот как. Понял, спасибо.
389 2760934
Ни разу не юзал прикрепляемые свойства и тут возник ступор.

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

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

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


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

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

По какой-то причине DependencyObject здесь тоже ListView. В принципе причина логична, но вообще возможно ли получить экземпляр класса, в котором прикрепяемое свойство находилось изначально? Зачем я вообще при регистарции указывал другой класс?
390 2761067
>>760934

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


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

> но вообще возможно ли получить экземпляр класса, в котором прикрепяемое свойство находилось изначально?


Насколько я знаю нет.

> Зачем я вообще при регистарции указывал другой класс?


Чтобы среда знала, где искать геттер и сеттер.
391 2761182
>>761067
Ну штош, жаль что нельзя. Спасибо.
392 2761415
Вы фронтенд для ASP учите? Или чисто ищете бэк вакансии? Как я заметил как минимум 50% вакансий требуют умения писать фронт. А иногда еще и Razor, лол.
393 2761428
>>761415
Бэк + немного фронта. Один хрен веб уже слишком разросся и отрицать его глупо
394 2761463
>>761428
Спору нет конеш, но даже на пхп меньше вакансий, где требуют знание frontend-технологий, а зп такая же, вакансий больше. Зачем вам здался этот шарп? Вы же в России живете, а не там. Выбирайте по делу, а не по желанию и будете с пирогом, а если нет - будете сосать бибу.
395 2761520
>>761463

> и будете с пирогом, а если нет - будете сосать бибу.


Сижу с пирогом ещё и нравится стек что как хобби на нём же
396 2761606
Я правильно понял, что залётный пхпшник - это на самом деле жабадебил?
397 2761701
>>761415

>Или чисто ищете бэк вакансии


This. На шарпе сейчас достаточно проектов с микросервисами в которых либо вообще нет фронта, либо он таков, что проще нанять одного-двух фронтедеров которые будут его вести, вместо распыления на это дело ресурсов кучи бэкендеров.
398 2761786
>>761463

>Вы же в России живете, а не там


Я живу там так что мне можно изучать шарпы
399 2761989
>>761606
Поебать + похуй, но чел потерял берега. И учитывая его пристрастия к политоте, таким шизоидам не впервой всюду лезть и ебать мозги мнением, которого не спрашивали.
изображение.png111 Кб, 1681x377
400 2762064
Нахуя?
401 2762120
>>762064
Здорово, что в интерфейсах можно писать бизнес-логику. Не могу дождаться, когда в интерфейсы добавят статические конструкторы.
402 2762329
Всем привет. Хочу пополнить портфолио парой проектов на asp за это лето, но что-то толковое на ум не приходит. Подскажите пожалуйста что-нибудь
403 2762336
>>762329

> портфолио


Потратишь овердохуя времени впустую. Никто не смотрит вкатунские гитхабы.
404 2762349
>>762336
Да мне сейчас в принципе важнее любая практика. Но раз уж об этом, то на что хры смотрят?
405 2762355
>>762349
Практика - это не портфолио. В учебных целях можешь написать, к примеру, имиджборду.
Хры смотрят на то, где учился и какие у тебя хардскиллы.
406 2762359
>>762355
Тогда будет ли нормальной практикой написать браузерный IRC клиент? То есть помимо всего прочего подразумевается реализация уже существующего протокола.
407 2762365
>>762359
Да, пофиг что писать, можешь брать идеи хоть из картинки pro/g/ramming challenges.
image.png1,3 Мб, 1284x949
408 2762554
Сегодня узнал, что на С# можно писать драйвера под шиндоус. Ебало крестовиков скомпилировали? Походу скоро шарпуха станет реально всеобъемлющим япом.
409 2762560
>>762554
Чё там по драйверам на линупс?
410 2762592
Зашёл в поиск, ни одного треда по F#. Из местных, может, увлекается кто-нибудь?
411 2762601
>>762592
Так же как и с бейсиком — ИТТ мимикрируешь под шарписта и все охуевают от твоей странности.
412 2762602
>>762601
Надёжный план
413 2762606
>>762554
Ну таки в ансейфе можно дикую анальную эквилибристику устраивать вплоть до оптимизаций через ссе/авх/етц...

>>762560
Видел что под линью тестили дрова для сетевухи на жабе/шарпе/расте/другом говне. Должно гуглиться репо на гитхабе. Проект был года 2 может назад
414 2762609
>>762606

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


Я как-то попробовал "просто" вставить нативный код с винапи, так понадобилась анальная эквилибристика с пробрасыванием в C++/CLI. При этом оно запускалось без возражений, но не действовало, кончилось тем, что я просто кинул в папку нормальный экзешник скомпиленный на нормальном С++. Кошмар. Динамикодрисня и нативный код это взаимоисключающие понятия. Что бы там ни кукарекали маркетолухи: "мы не хуже, слышите, не хуже!". Да, вы не хуже, потому что вы днище к которому понятие сравнения неприменимо, слишком велика пропасть разницы.
415 2762613
>>758756
Почитай .NET API, посмотри самые популярные библиотеки и фреймворки.
кофе-грусть-печаль-баянометр-молчал-Буквы-на-белом-фоне-4909777.jpeg36 Кб, 720x673
416 2762623
Смотрю после гречневой работы уроки C#. Мечтаю вкатиться. Нет каких-нибудь идей, как найти подработку на выходные в около айти, но чтобы капали какие-то реальные деньги, пусть хоть 20 рублей в час?
417 2762624
>>762623
Как вкатиться на гречневую работу? Заебало айти. Вы то там в 9 пришли в 6 ушли и голова не о чем не болит, а мне с 8 до 8 сидеть, еще и на выходных выходить, если не успеваю.
418 2762632
А в чем прикол вашего "шарпа"? Тут даже множественной наследования нет как в Python. Как по мне Python лучше чем шарп во всём асболютно. И коммунити не такое токсичное и библиотек дохера различных, фреймворков куча, синтаксис кайфовый, дизайн языка божествененн.
419 2762648
Сап, двач, реквестирую советов мудрых.

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

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

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

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

Спасибо.
420 2762696
>>762632
Вот и уёбывай в свой петухон.
421 2762716
>>762632

>А в чем прикол вашего "шарпа"?


Чтобы программировать, дурачок. А для pip install "либа написанная на C нейм" есть петухон, да.

>Множественное наследование


Собственно, все что нужно знать про петухон.
422 2762722
>>762632

>Тут даже множественной наследования нет как в


И нахуя оно нужно? Тут и с обычным наследованием макаки умудряются такого наговнокодить, я представляю какое говно они выдадут с множественным.
423 2762728
MediatR еще пользуются?
Зачем он нужен?
424 2762733
>>762648
Вот тут паря делает небольшой сайт при этом выделяет всякие слои-хуи и т.д. В принципе норм для начала про крайней мере мне зашло
https://www.youtube.com/playlist?list=PLeY40vx99GXbqajpsCOQ-Vjb3Cp03u7jN
425 2762738
Пилю десктопную программу для просмотра картинок. Пока что решение состоит из нескольких проектов:
- Проект с сущностями для базы данных
- Проект для работы с локальными данным
- Проект для работы с различными api
- Проект с сервисами, который взаимодействует с двумя вышеназванными проектами
- Проект с интерфейсами, на который ссылаются все проекты за исключением проекта с бд.
- И наконец проект с гуем, который работает с сервисами из соответствующего проекта.
Все правильно сделал?
426 2762780
>>762738

>программу для просмотра картинок


>базы данных


>различными api


>сервисы


Жирно.
427 2762782
>>762780
Что жирного? Картинки можно будет просматривать не только из локальных директорий, но и со всяких бур. База данных для присваивания картинкам тегов.
428 2762788
изображение.png12 Кб, 420x82
429 2762854
Пиздос. Сейчас читаю Албахари в русском переводе ангельский примерно на A1. Так вот, перевод ебаное говно, так ещё и очепятки есть.
2023-07-1212-39-29.png14 Кб, 501x226
430 2762889
Слушайте, ни у кого нет данного бага? Периодически отваливается xaml часть от код бихайнд. К примеру пикрилейтед, инициализация компонента, все переменные в xaml, к которым я обращаюсь по имени — не видны.

Лечится тем, что я захожу в файл <проджект_нейм>.csproj.user и чет там меняю, к примеру добавляя строку или пробел. Я думал это проблема бейсика, но в шарпе эта залупа тоже прослеживается. Обновление предпоследнее (если считать вышедшее 13ч назад).
431 2762892
>>762889
Это норма. Перезагрузи проект, должно помочь.
432 2762894
>>762892
Вот перезагрузка точно не поможет. Точнее, ошибка не будет возникать пока я не открою проблемный файл (и будет пропадать, как только его закрою). Чтобы в принципе исключить проблему, нужно чтобы студия обновила .csproj.user
image67 Кб, 601x766
433 2763002
>>762120

>Не могу дождаться, когда в интерфейсы добавят статические конструкторы.

434 2763016
>>763002
Объясни что здесь происходит
image80 Кб, 539x830
435 2763036
>>763016
Можно объявлять абстрактные (и виртуальные конечно тоже) статические методы в интерфейсе, которые обязан имплементить тип.
Это сделано для дженерик математики, но чувствую скоро мы увидим большое разнообразие применение данной фичи. Так сказать во всех галерах мира
436 2763108
>>763036
А что это за серые подписи сверху заголовков? Статистика наследования, использования и прочее. Как это включить?
437 2763760
>>763108
это code vision в райдере
01.png47 Кб, 544x840
438 2764109
Почему мой говнокод так странно работает? Была идея заполнять массив в цикле foreach. Нагуглил, что для этого нужна отдельная переменная, которая используется как индекс для записи в массив. Ну да, это работает. Второй цикл показывает, что и по индексу и по перечислителю возвращается одно и тоже значение. Но почему в первом цикле, перечислитель постоянно выдает 0, хотя индекс показывает, что значение уже присвоено?
439 2764226
>>764109
потому что при
foreach(int elem =
в elem было СКОПИРОВАНО значение ячейки из массива. И что там с массивом дальше происходит - ей до одного места, она ссылается на копию. ДАЖЕ если то будет ссылочный тип - все равно это будет КОПИЯ ссылки.

нужен ref чтобы ссылалось именно на ячейку в массиве и видело изменения.
440 2764244
>>764109
>>764226

>ДАЖЕ если то будет ссылочный тип - все равно это будет КОПИЯ ссылки.


И что? Любые копии ссылок - равнозначны, ссылаются на одно и то же. У тебя так устроена файловая система на компьютере. Имена файлов это лишь ссылки, обычно ссылка одна, но ничто не мешает сделать еще, и они все будут одинаковые, везде тот же самый файл - один.
441 2764276
>>764109
1) Если тебе в foreach понадобился индекс для элемента коллекции - значит код изначально неправильный, переделывай. Это не значит, что так делать совсем нельзя, но это явно не твой кейс и ты даже близко не подошел к темам где это может понадобиться.
2) Вообще использовать foreach для массивов такое себе. Используй for и не выебывайся. Да и само использование массивов - тоже не айс. Учись сразу пользоваться коллекциями.
3) Foreach не используется для изменения содержания коллекции, только для работы с конкретными элементами и изменения их. Если тебе эта фраза кажется странной, то ты еще не дорос. Возвращайся к изучению, что такое коллекции, как работает итератор и отличию reference types от value types.
442 2764297
>>764276

>3) Foreach не используется для изменения содержания коллекции


Используется, есть .ToList() делающий копию которую перебирает foreach, с помощью ссылок из которого манипулируешь настоящим списком.
443 2764310
>>764244

>И что? Любые копии ссылок - равнозначны, ссылаются на одно и то же


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

>У тебя так устроена файловая система на компьютере


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

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

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

для этого есть ref locals - вот он позволяет сослаться на конкретную ячейку памяти без копирования значения этой ячейки.
02.png58 Кб, 591x788
444 2764331
>>764276
Это я и так знаю. Я же не спрашивал почему elem=10 выдает ошибку. Вопрос больше теоретический.

>>764226
>>764310
А вот тут не понятно. С одной стороны, похоже это действительно так и работает. Если предварительно инициализировать массив, то Console.Write(elem) начинает выдавать именно эти значения. И что тогда получается? foreach создает копию значений всех элементов массива? Такого быть не должно. Массив же ссылочный тип. А если в нем миллион элементов, и что, в кажом foreach каждый раз будет создаваться миллион копий?
445 2764341
>>764331
одна копия создаётся на каждом цикле
если у тебя массив из миллиона элементов, в итоге, у тебя будет миллион копий, но в конкретный момент времени будет лишь одна, если ты её не сохранишь где-нибудь ещё конечно
446 2764411
>>764341

>в итоге, у тебя будет миллион копий, но в конкретный момент времени будет лишь одна


Ну то есть он типа по очереди копирует каждый элемент в одну и туже переменную? Все равно как-то не очень. Получается по памяти может расход и не большой, а по времени в целом в конце концов выходит тоже самое, что скопировать весь массив в новое место.
447 2764416
>>764331

>Такого быть не должно. Массив же ссылочный тип.


Учи базу чтобы таких вопросов не было.
448 2764428
>>764411

>а по времени в целом в конце концов выходит тоже самое, что скопировать весь массив в новое место.


С байтоебством тебе в C++
449 2764438
>>764297
То что там ToList под капотом делает вообще поебать. По факту ты все равно получишь новую коллекцию, а старая останется неизменной. Нельзя внутри foreach делать какие-либо манипуляции с наполнением самой коллекции. С отдельными элементами на которые у тебя в коллекции ссылки можно делать что угодно, а вот заменять/удалять/добавлять сами ссылки в коллекцию - нельзя, только собирать новую.
450 2764491
>>764331

>Массив же ссылочный тип


какая разница если фореач на каждой итерации работает с ЭЛЕМЕНТОМ массива, а не с массивом
так что если в нем миллион элементов, то да, будет миллион итераций и на каждой будет создана копия значения очередной ячейки массива.
451 2764500
>>764411

>что скопировать весь массив в новое место.


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

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

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


джит смущается и где надо сделает портянку
453 2764535
>>764516
нет не сделает. даже если его попросить сделать "агрессивный инлайн", то все равно далеко не всегда сделает.

тут вам не котлин с его настоящими инлайн функциями
454 2764545
>>764535
значит там "не надо"
00098989876.png108 Кб, 1920x1080
455 2764656
Анчебусы, осваиваю "If", "Else".
Как сделать так, чтобы на экран консоли выводился текст в скобке, а не просто "true"?
456 2764716
>>764656
У тебя там и будет выводиться твой текст.
457 2764730
>>764716
Да не выводится у меня в консоли ничего кроме true.
458 2764734
>>764730
так ты ж запусти
459 2764751
>>764734
Что я запустил? Мне нужно чтоб текст в скобках в консоли отображался, а этого не происходит.
460 2764763
>>764751
Ты не то запускаешь. См. справа Обозреватель решений. У тебя по умолчанию Test запускается, а тебе нужен Test_2.
461 2764765
Всё, сам разобрался в чём причина. Просто в одном и том же решении у меня два проекта и я не тот проект запускал при нажатии F5 лол.
462 2764767
>>764763
Да да, я уже сообразил. Спасибо.
463 2765127
>>740238 (OP)
Привет, може ли как-то GC влиять на стек или он только кучу чистит?
464 2765129
>>765127
Так то в любом языке сборщик занимается только кучей. Что конкретно тебя заставило сомневаться, что в C# это не так?
466 2765143
>>765129
>>765138
Хотя я туплю, спан же на память которая в куче смотрит, завтра... Спать пойду уже
467 2765145
>>765138
Нет не оговорился. Span-ы это указатели на область памяти, а не на стек. И потому GC знает про span чтобы уплотнять память и не похерить их.
А вот в старом дотнете они сделаны через костыли - там неполноценные span
но там же некрофилы
468 2765148
>>765145
За то некрофилы умеют в Thread.Abort() и AppDomain.CreateDomain(), чел.
469 2765151
Кто-нибудь хостил clr? Можете научить?
470 2765155
>>765148
а второне нужно?
471 2765159
>>765151
что в твоем понимании "хостить clr"?
какая то магия?
472 2765160
>>765148
Аборты запрещены xD
А что делает, поток прерывает? Почему запретили?
473 2765162
>>765159
Хочу рантайм который не падает от необработанного исключения в async void в пользовательском коде.

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

То есть async void существует, Assembly.Load() существует, Activator.CreateInstance() существует. А блядскую политику поведения при необработанном исключении, для собственного домена, переопределить нельзя. Без пердолинга на плюсах.
474 2765166
>>765160
Скорее всего из за мультиплатформенной парадигмы. А может потому что домохозяйкам не положено безусловно убивать потоки, которые могут оставить после себя неосвобожденные ресурсы.
475 2765191
>>765160
запретили потому что нет гарантий сохранить валидное состояние программы. Альтернатив не дали.

>>765162
Нуууу.
Я дам тебе только направление
Ты знаешь про 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 и на тебя снизойдет просветление, что нужно брать котлин - там скриптинг искаропки
476 2765205
>>765191
Есть кастрированный аналог - Thread.Interrupt()

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

>задай свой SynchronizationContext


Спасибо за совет. Можешь код показать?
477 2765214
>>765205
Нет. Я не знаю как решать твою задачу.
Мне понятно только одно - в случае async void исключение будет выброшено в текущем SynchronizationContext.

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

Даже если ты разберешь исходник класса Dispatcher (а то и вообще весь его просто перенесешь) и поймешь че да как, то все равно легко запустить async void без контекста и все упадет.
478 2766197
Аноны, как лучше прокачать себе Шарп и асп.нет? Где найти задачи, кроме литкода, на литкоде говно не имеющее отношения к реальной жизни :(
479 2766221
>>766197
Хутиу какаю-нибудь одному тебе интересную говнокодить. Потом рефакторить и опять говнокодить. И так покругу.
480 2766304
>>766197
да все просто
напиши свой двач, свой твиттер, свой фейсбук, свой вк
пересади на них весь мир и сможешь использовать их в портфолио и устроиться на на работу за 25тыс
481 2766388
>>766197
С прошлого треда:
1) Электронная очередь. Учитывая все ньюансы. От выдачи номера, до распределения к кому из операторов клиент попадет на обработку, с учетом того, что задачи у посетителей могут быть разные и что у операторов тоже разная области ответственности. И все должно идти ровно и без долгих простоев. Если делать по честному от и до, то сможешь проработать дохуя ньюансов, о которых не стыдно будет рассказать.
2) Роутинг электронных сообщений. Это когда в какой-нибудь каталог на диске или сетевую шару постоянным потокам сыпятся xml-ки в охуительных объемах и их нужно оперативно оттуда разбирать, обрабатывать согласно бизнес-процессу и передавать дальше, попутно сохраняя нужную инфу в БД и выкидывая нужные ссобщения. Тут тоже дохуя приколов от многопотока, до разбора ЭС и т.д. И как бы тупо это не звучало, но это до сих пор стандарт и куча B2B взаимодействия происходит в таком виде (да-да никаких очередей вам сучечки). Поэтому нужно не просто уметь делать такие вещи, а делать их быстро и эффективно. Вплоть до того, что тебе тупо могут дать xml-ну на несколько тысяч строк и без всяких спеков и xsd схем и ты должен уметь ее разобрать и встроить это в существующий БП.
482 2766411
>>766388
1. Пиздец. Кто мне тз на это всё напишет?
2. То же самое, плюс нихуя не понятно про "охуительные объёмы". Гигабайт в секунду? Тысяча xml по гигабайту каждый в секунду?
483 2766487
>>766411

>1. Пиздец. Кто мне тз на это всё напишет?


Вот заодно и в этом тоже и потренируешься. Если ты думаешь, что на реальной работе тебе кто-то будет составлять ТЗ описанные более подробно чем здесь >>766388 , то ты ошибаешься.
Просто зайди на почту или в любую другую контору в которой где есть очердь по талонам, посмотри как там все происходит и сделай что-либо подобное.
>>766411

>2. То же самое, плюс нихуя не понятно про "охуительные объёмы". Гигабайт в секунду? Тысяча xml по гигабайту каждый в секунду?


Ну возьми для начала штук 3 миллиона в день, с пиком в тысяч 100 в час. XML достаточно килобайт по 20 там не размер важен,а содержание, плюс уметь это разбирать так, чтобы потоки друг с другом за файлы не дрались. Для примера можешь взять, ну хуй знает, ЭТРН какой-нибудь и попробовать доставать из него часть информации и формировать на их основе какие-нибудь свои данные, плюс можешь потренироваться подписывать, проверять подписи на xml-не, тоже полезный навык.
484 2766489
>>766487

>так, чтобы потоки друг с другом за файлы не дрались.


Алсо, еще и очереди не должны копиться. Т.к. обычно бизнес на обработку одного такого сообщения дает лимит времени. Обычно несколько минут максимум.
485 2766498
>>766487

>на реальной работе


Есть реальные люди, которые знают, как работают их процессы. Или у них можно спросить. Или можно подойти посмотреть.
486 2766556
>>766498
Если ты думаешь, что ситуация когда тебе дают задание написать какой-то модуль или сервис, ты начинаешь пытаться узнать у окружающих что и как работает в системе и получаешь от всех в ответ "а хуй его знает" - это что-то нереальное, то я тебя огорчу. Такое случается с завидной регулярностью.
487 2767443
Подскажите, что почитать, чтобы лучше проэктировать классы их иерархию и т.д.?
488 2767579
>>767443
Почитай мать и отца своих.
489 2767638
>>762738

> Пилю десктопную программу


> Все правильно сделал?

490 2767682
>>767638
Ну и в чём он не прав?
491 2767944
>>767682
в том, что пришел с этим сюда
492 2768057
Пацаны.
Почитал про новые фичи нового шарпа.
И меня чутка смущают новый синтаксис для конструкторов по умолчанию.
Ну, т.е. вот та ебала из котлина, когда:

class Zalupa(ILogger logger, IServiceA serviceA){}

Почему смущает. Потому что я уже привык, что я в конструкторе делаю валидацию параметров. Как ее тута делать - хуй знает. Второе - я так и не понял - для классов это так же как у рекордов будет публичными свойствами? А если мне нах это не уперлось?
493 2768123
>>768057
Так чё? Тебе запрещают юзать "старый" синтаксис?
494 2768237
>>768057
Похуй + похуй
Ты, наверное, небольшой стаж имеешь. Спустя время, если не будешь сидеть сиднем, будет безразлично, что там и как выражается.
Мне вот фшарп сейчас больше шарпа нравится. Все ругают джаву за многословность, и есть за что. Говорят, на шарпе код лаконичнее. Так вот, фп код ещё короче, чуть ли не в половину.

Единственное, что бесит – фшарп для Майкрософт язык второго эшелона, соответственно, нет горячей перезагрузки и встроенного форматирования кода в VS. Ну и ошибки компилятора порой нечитаемая залупа. А так – как глоток свежего воздуха
495 2768400
>>740238 (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. В этом случае нужен ли ворд для работы готовой программы на компьютере где нет ворда?
497 2768435
>>768408
Ясно. Тогда OOXML попробую. Похоже все в docx придется переводить.
2023-07-1612-43-54.jpg195 Кб, 1602x305
498 2768437
Поясните, что этой залупе не нравится?
499 2768455
>>768437
Либа написана на netstandard2.1, а использую ее в net 7.
Может это из-за того, что в первой отсутствует ебатория с вопросиками? Но я впервые вижу чтобы в EventHandler sender был nullable. Или не обращал внимания
500 2768489
>>762623

>Смотрю после гречневой работы уроки C#. Мечтаю вкатиться. Нет каких-нибудь идей, как найти подработку на выходные в около айти, но чтобы капали какие-то реальные деньги, пусть хоть 20 рублей в час?


Ну нет так нет
>>762624

>Как вкатиться на гречневую работу? Заебало айти. Вы то там в 9 пришли в 6 ушли и голова не о чем не болит, а мне с 8 до 8 сидеть, еще и на выходных выходить, если не успеваю.


https://2ch.hk/wrk/res/2625231.html#2730098 (М)
Тут глянь
501 2768505
Как заставить студию копировать ресурсы только если они изменились? Вот у меня есть в ресурсах ffmpeg.exe, который весит под 150 мегабайт (а там есть еще ffplay.exe = 150Мб, ffprobe = 150Мб). Если я ставлю "всегда копировать" или "Копировать более позднюю версию", то при каждой сборке файл копируется, увеличивая время сборки.
502 2768551
>>768505
Сделай копирование своим скриптом и положи в пост-билд эвенты.
503 2768670
>>768057

> конструкторов по умолчанию


> я в конструкторе делаю валидацию параметров


Ничего не смущает?
504 2768751
>>766197
На реальных задачах.
505 2768757
>>767682
Пилить в 2023 дестктопную программу для картинок вместо использования профессионального софта - быть дауном. Бывают специфичные КЕЙСЫ, когда заказчик платит и ему похуй, но даже в таком случае стоит взять опенсорс проект, который легче всего экстендится.
Тратить время на это как на пет проект? Чтобы научиться круды шлёпать или орм юзать - так ты этому научишься в любом месте. Да даже если веб-приложуху делать - ты больше с технологиями познакомишься, как минимум нужна будет очередь юзеров на функционал для гостей.
506 2768759
>>768670
Про рич модели почитай. Тебя тоже перестанет смущать.
507 2768970
>>768057
ну никак не делать. А вообще вон в котлине там есть блок init{ }
а в шарпе - ну только не использовать этот новый синтаксис

>>768759
это тут вообще никаким боком
508 2770464
перекот?
sage 509 2770474
>>770464
Нет, иди нахуй со своим даунским перекатом, пока 1000 постов не будет.
510 2770476
>>770474
Какие нахуй 1000 постов, сука? Тебе в ёбыч дать чтоле?
image23 Кб, 445x775
511 2770714
>>770464
это последний сишарп тред
512 2770720
>>770714
Кобол, спок.
564575475000.png137 Кб, 1920x1080
513 2770838
Пацаны, делаю д.з., пишу самый простенький калькулятор. Никуя не работает, выдаёт ошибку "Входная строка имела неверный формат.", ссылаясь на 16 строку кода. Даже сумму 5+5 не даёт. То есть, ввожу в консоле 5, потом +, потом 5, жму Enter и вылет с ошибкой. Что не так делаю, подскажите?
514 2770936
>>770838
В ридлайн пишутся только строки вроде, и надо преобразовывать в инт
515 2770938
>>770936
А я тупой сори
516 2771810
>>770938

>А я тупой сори


В смысле?

>надо преобразовывать в инт


Почему в инт? Я же калькулятор делаю. Дробные числа ведь тоже нужны. Более того, чел в видеоуроке делал калькуль с дабл, а не с инт и у него всё работало.
517 2771854
>>771810
Посмотри, что у тебя в 16 строке находится в Сonsole.ReadLine()
Я уверен что там или пустой стринг или что-то, что не получается распарсить. Попробуй использовать Double.TryParse:

var successParse = double.TryParse(Console.ReadLine(), out firstValue);
if (!successParse) Console.WriteLine("Input value is not a number.")
518 2771881
>>771854

>Посмотри, что у тебя в 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.")


Попробовал так. Теперь после ввода второго числа, консоль не вылетает, но и сумму чисел не даёт.
519 2771928
здарова синьоры, объясните вкатуну разницу между методом и функцией
520 2771940
>>771928
Функций нету.
521 2771981
>>771881
при double.TryParse и вообще парсинге дабл не забывай про разделитеь - он может быть точкой, а может запятой. (хотя чем трахаться с региональными форматами - проще все в одну форму привести)

>>771928
яйца же.
.png412 Кб, 663x712
522 2772129
>>771981

> яйца же.


Это которые курицу не учат?
523 2772375
>>772129
которые те же в профиль.
метод = функция объявленная в классе. Так что можешь называть хоть так хоть этак - всем плевать. А если кому не плевать - плюнь на него.
524 2772384
>>772375
Метод это функция cо скрытым параметром this.
525 2772751
Аноны, подскажите по распознаванию звука на С#. Хочется прикрутить распознавания речи на русском и чтобы все это работало в офлайн режиме. Я так понял это можно реализовать только с Microsoft.Speech? Других вариантов нет? Я так понял на Microsoft.Speech надо прописывать свой словарь?
0000234676.png196 Кб, 1920x1080
526 2772909
Анчоусы, это снова я. Пишу калькулятор. Нужно сделать так, что бы при выборе числа и вводе в консоль абракадабры вместо цифр программа не вылетала. Как это осуществить? Я так понимаю, что мне нужно в каждый case switch впихнуть блок try catch?
527 2772928
>>772909
Пиздец как ты заебал.
528 2772982
>>772928
Чем я тебя заебал, чучело? Я тебе на телефон названиваю что ли? Тред как раз для этого создан, чтоб общаться на тему кода в рамка С#.
529 2772984
>>772909

>в каждый case switch впихнуть блок try catch


Именно так, дерзай
530 2773140
>>772984
Написал, получилось. Всё работает как надо.
531 2773149
>>772384
скажи это статическому МЕТОДУ.
532 2773158
>>768505
Copy if never не работает?
картофель-на-белом-фоне-172337216.jpg48 Кб, 800x547
533 2773460
>>740238 (OP)

>>[,]


это блять што?
ut-00007278.jpg102 Кб, 1200x1200
534 2773494
>>773460
ничё, всё.
наскальная живопись ёбаная а не язык
535 2773585
>>773149
Это уже не класс, а неймспейс. Простая функция, а не метод.
536 2773645
>>773585
все проще. это ты уже сам придумал.
решил натянуть сову.
537 2773831
Гайз, есть ли где нормальные гайды по переносу C# приложений из Windows в Linux? Это вообще возможно сделать если приложение использует сторонние библиотеки?
538 2773835
>>773831
Лишь бы эти сторонние библиотеки не были прибиты гвоздями к винде.
539 2773839
>>773835
Да уж. Что-то захотелось просто через wine попробовать запустить.
540 2773925
>>773831
Сначала апгрейдишь все до .NET6.
Потом переводишь на линукс.
Все гайды есть на мсдн.
541 2773941
>>772909

>что мне нужно в каждый case switch впихнуть блок try catch?


Каждый double.Parse в try/catch оборачивай.
Злая подъебка
542 2773989
>>773941
>>772909
Зачем вы оверинжинерите? Есть же идеально подходящий сюда TryParse который позволит не тянуть здоровую портянку
543 2773990
>>773925
Апгрейдишь проект с винформами до .NET6. Успех.
Переводишь на линупс... Так, gадажжи ёбана.
image.png1,2 Мб, 1266x1066
544 2774028
>>773989
Чувачок, это сарказм был если чо.
Он даже базовых if while и прочего нормально не знает скорее всего. На данном этапе абсолютно похуй как и что он делать будет, даже если он хоть каждую строчку в try-catch обернет. Потом уже когда научится нормально и соображалка будет работать, то если не дурак то поймет как надо.
545 2774031
>>774028
Десктоп приложения и на винде-то с каждым днем все меньше и меньше нужны, нахуя их еще и на линукс тащить?
546 2774038
547 2774129
>>773158
А это где такое?
548 2774199
>>774129
В свойствах файла
"Действия при сборке", кажется – как на русском, не помню
изображение.png1 Мб, 960x720
549 2774421
Ну и еблище у неё
550 2774449
>>774421
QUALITY ANIME
551 2774563
>>774421
А с каким лицом читают книги по фреймворкам? Ладно там читать про параллелизм/архитектуру/паттерны/алгоритмы – про первичную базу. А читать про что-то вторичное – ну хз
image.png130 Кб, 648x802
552 2774621
>>772909
На, мужик, тебе изоленту.
Я в курсе, что ты этого нихуя не проходил, но это тебе пример, того что ты должен понимать и уметь делать на уровне джуна. И это тоже далеко не самый лучший код.
2023-07-2013-25-52.png32 Кб, 684x458
553 2774679
Кто нибудь работал с FFmpeg. Допустим мне надо конкатенировать 10 аудиофайлов в один, и чтобы между ними были пробелы. Так вот и я видел примеры на SO, что все операции для N файлов пытаются запихнуть в одну команду.

Всвязи с чем вопрос, а почему делается так? Почему не делают цикл, где отправляются простейшие команды?
554 2774746
>>773149

>Метод это функция cо скрытым параметром this.


>скажи это статическому МЕТОДУ.


Что не так? Рефлексию видел? Единственное отличие вызова статического метода против нестатического - это передача null в качестве инстанса, то есть в случае статики this == null, всё.
555 2774820
>>774679
потому что за 1 проход быстрее, чем несколько последовательных вызовов программы, которая на каждый вызов должна читать файл, декодить и начинать работу заново.
556 2774825
>>774746

>вызова статического метода против нестатического


ты эти вопросы адресуй анону, что стат метод функцией назвал, а класс со стат методом неймспейсом для этой функции нарек.
557 2774905
>>773941
>>773989
>>774621
Я действительно в каждый case свитча запихнул по блоку try/catch, затем отшлифовал некоторые места и работает всё как планировалось изначально. Все четыре основные мат. операции, калькуль не крашится при вводе чего-то не того, а отбрасывает в начало, стирая результаты предыдущей операции и работает до тех пор, пока я не закрою консоль. Да, код выглядит громоздко, но работает.
558 2775096
>>774905
Ну покажи конечный код
И мы устрашимся
2023-07-2019-44-17.png6 Кб, 286x126
559 2775293
В чем смысл данной конструкции?
560 2775304
>>775293
string Name { get { return this.Argument; } }
561 2775332
>>775096

>Ну покажи конечный код


А как это сделать?
562 2775365
>>775332
да хоть на пастебин положи. вряд ли у тебя там более одной портянки
563 2775895
>>775293
Возможно прокси для какой-нибудь легаси-хуйни. Может в источнике под капотом там какие-нибудь разные свойства были, а по новой бизнес логике должно отдаваться одно и то же но с сохранением старого API.
изображение.png36 Кб, 527x165
564 2776231
Почему?
565 2776368
>>776231
что почему?
566 2776735
Почему этот язык такой приятный?
Сложно ли будет найти РАБоту ( готов работать на галлере ) если потрачу время и силы на этот язык?
567 2776768
>>776735

> Почему этот язык такой приятный?


Сахар.

> Сложно ли будет найти РАБоту ( готов работать на галлере ) если потрачу время и силы на этот язык?


Несложно.
568 2776776
>>776768

>Сахар


синтаксический сахар? syntax sugar?
56346475674563456.jpg27 Кб, 604x341
569 2776783
Пацаны, нужна ваша помощь. Я никуя не понимаю.
Делаю программку по этому видеоуроку https://www.youtube.com/watch?v=bJ4DtsojdrI&list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N&index=23[РАСКРЫТЬ]
Нужно сделать так, чтобы после ввода чисел в консоль был совершен подсчёт чётных и нечётных чисел в заданном диапазоне чисел (например от 0 до 100), а затем найдена сумма чётных и сумма нечётных чисел в этом самом заданном диапазоне. Надеюсь объяснил понятно.

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

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

Помогите пжлст. С меня как всегда.
570 2776787
>>776776
Да. Шарп приятный, потому что сладенький из-за обилия синтаксического сахара. Остерегайся сахарного диабета.
571 2776821
>>776783
5 -> 1, 2, 3, 4 5 -> (1, 3, 5), (2, 4) -> 9, 6
572 2776838
>>776783
Анончик, ты чево...

СУММА нечетных от 1 до 5
1,3,5 = 9
573 2776853
>>776735
Потому что его проектировали профессиональные инженеры высшей квалификации, а не опенсорная шушера.
574 2776911
>>776821
>>776838
А всё. Теперь понял. Благодарю.

P.S.
По-моему задание должно было звучать так: найдите сумму значений чётных/нечётных чисел.
.jpg158 Кб, 1365x2048
575 2777232
Шарпогоспода, вы же шарите за таски и все что с ними связано.

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

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

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

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

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

Собственно. Че посоветуете-то?
.jpg158 Кб, 1365x2048
575 2777232
Шарпогоспода, вы же шарите за таски и все что с ними связано.

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

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

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

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

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

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

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

3. Есть ли смысл использовать
string.Format("число: {0}", number)
вместо
"число: " + number.ToString()
577 2777238
>>777234
При интерполяции - ты отдаешь на откуп компилятору все.
Обычно он просто приведет твою строку к string.Format("abc {0} def {1}", foo, bar)
578 2777247
>>777238
Ясненько, спасибо.
579 2777401
>>777232
ну вот потом и расскажешь что получилось.
580 2777550
>>777234

>1


Второй способ удобнее когда тебе нужно в строку вставить несколько копий одного и того же параметра, например
string.Format("число: {0} и еще раз {0} ну и еще раз {0}", number)

>2


Отличие в том, что во втором случае компилятор за тебя сам потом отэскейпит последовательности.
581 2777755
>>777234
1 в боксинге отличие. в первом случае компилятор и шарп 10 позаботятся чтобы его не было. Ну и тупо читабельнее в 1 случае, если он возможен

3 первый вариант читабельнее, в остальном пока разницы нет.
582 2778037
>>777755

>1 в боксинге отличие.


1. Тащемта боксинга можно избежать просто передавая параметры через .ToString(), например:
string.Format("число: {0}", number.ToString())
2. Сам парсинг в String.Format сожрет намного больше времени чем боксинг, так что не особо стоит заморочек.
583 2778328
У меня есть класс, который перед использованием нужно инициализировать. Так вот, какое исключение кидать, если пользователь попытается вызвать метод до инициализации?
584 2778331
>>778328
Свое навасянь и его кидай.
585 2778556
>>778328
Тоже интересует данный момент.

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

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

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

Иногда лейзи инициализацию делаю
589 2778671
>>778613
Я бы сделал как ты пишешь, но тогда будут проблемы с di.
590 2778679
>>778671
Инжектишь экземпляр фабрики вместо экземпляра целевого класса. Потом, в том месте где необходимо, с помощью фабрики создаёшь нужный тебе объект. С DI тут вообще проблем нет. Единственное, если твой объект через параметры конструктора из DI зависимости получает, то переносишь их в параметры конструктора фабрики, а потом прокидываешь в конструктор объекта при его создании.
591 2778705
>>778556
Можешь хелпер написать и в каждом методе просто дёргать ThrowIfNotInitialize()
.jpg945 Кб, 874x1240
592 2778756
Пацаны.
Планирую вкатиться джуном.
Решил вот так сказать закрепить свои знания о том что изучил за последний год. В качестве пет-проекта типа тамагочи решил сделать.

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

Вся инициализация целевого класса должна происходить в конструкторе. Если это публичное апи. В своем - че хочешь делай и че хочешь кидай. Но наружу такое просачиваться не должно, если ты не пидорас конечно.
594 2779106
>>778328
InvalidOperationException
Не слушай «архитекторов», если удобно - делай как хочешь. Ну и книжку по DDD ебани.
595 2779201
>>778756

>Оцените код


В нынешних реалиях на джуна - нет. На стажера может быть (только за стажировку платить будешь ты)

>дайте советов мудрых!


Сорян, но там такие базовые ошибки, что даже объяснять лень.
изображение.png18 Кб, 785x143
596 2779274
Ого, а думал, что в обобщениях вообще любая мат логика не работает, а тут, оказывается, можно написать обобщенный метод, который вычислит какое значение больше
598 2779320
>>779306
Ну это относительно недавно ввели, если я правильно понял. Ну а так вообще заебись, можно говнокодить всякие прикольные штуки с обобщениями
599 2779934
Шарпачи, прошу помощи, тут нашел удобную программу сортировалку картинок, но решил дописать немного функционал под себя, не могу выставить для одного объекта значение.

Сократил, немного, думаю смысл не потерялся.
Посмотрите?
https://pastebin.com/ajdw7cTb
600 2779962
>>779934
А, усё. Справился, хуйню понаписал.
601 2779964
>>779934
Разве не через ГетСеттер и Инвоук нужно?
602 2780023
>>779964
Заметил что они там 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;

> ГетСеттер и Инвоук


Не знаю насколько это правильно, на шарпе я, честно, второй день работаю
603 2780440
>>779934
вот кстати не пиши в таком стиле. это ж портяночный бардак. хотя бы минимальное MVP раз уж это винформсы.
604 2780645
>>758756
Синтаксически лаконичнее (по крайней мере был), есть сборщик мусора - не надо следить за памятью, ябучие хэдеры не нужны, всякие полезные структуры данных из коробки
605 2780686
В шарпе есть default properties? Поисковик выводит только default value property, а метаните ничего не упоминается.

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

Может отпустишь воняющее писюнами прошлое?
609 2780976
>>780440
Да есть такое, как-то по-китайски написано, много и ненужно. Но что ж поделать, проект уже готовый.
Рефакторить не хочется, этого и на работе хватает.

Так просто пару фиксов добавить для удобства надо, может даже пул реквест на них запилю, лол.
610 2781048
>>780686

> В бейсике



Ты как из криокамеры сбежал? Когда тебя заморозили? 9/11 при тебе было или уже после?
611 2781379
>>780751

>Это у вас они почему то круглые.


Потому свойства в бейсике это по сути метод, а метод может иметь кучу параметров. Грубо говоря я могу и вот такое провернуть
myCustomList("itemName", isChecked:=true)
Тут прослеживается логика, а ты мне про "так заведено" — очень странно.

>>781048
Забавно, что при отсутствии схожего функционала я в ответ получил только высокомерные оскорбления. Вообще со свойствами в шарпе полная задница. B cамое глупое в этйо ситуации то, что я не могу передать свойство в качестве параметра потому что свойство это метод, но при этом метод не поддерживает множество параметров. Зато обезьяньи квадратные скобочки — ага. Каргокульт бессмысленный и беспощадный, и высокомерие.
612 2781568
>>781379
а причем тут свойства если мы говорим про индексатор
и да, он тоже может иметь кучу параметров.

и для индексатора используются именно []
для свойств же кто на что горазд.
613 2781574
>>781379
>>781379

>Зато обезьяньи квадратные скобочки —


Ты, блять, не поверишь, но 'квадратные скобочки' - это по сути тоже метод. Гугли, что такое индексатор в шарпе.
И таких индексаторов к своему классу ты можешь прикрутить сколько угодно, с любым функционалом.
выпидорасы выпидорасы 614 2781675
выпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасывыпидорасы
615 2781678
>>781675
Да. Извиняться не будем
616 2782086
>>781568
>>781574
А, вот оно чё. Я думал индексатор может только принимать числа и один параметр. Вот эта штука мне и нужна была.

Если что, этот шиз >>781675 не я, а то еще подумаете.
image.png160 Кб, 1188x700
617 2782461
>>782086
Алсо не забывай еще, что индексаторы можно перегружать.
Вот на пике простой пример.
618 2782828
>>781379
И тем не менее - тебя когда заморозили? И как ты сбежал?
619 2782848
шарпаны, есть запечатанный класс с пачкой проперти, хочу прицепить к ним INPC. сам класс нельзя изменять (он из стороннего длл).
планирую врезаться в сеттеры рефлексией, подводные камни?
620 2782896
>>782848
Делай декоратор и не выебывайся.
С рефлексией ты на пустом месте теряешь от 10 до 100 раз в производительности.
Дополнительно - рефлексия это как ЭссКуЭль: пока пишьеш - просто понятно, когда через два дня посмотришь на это - будешь думать, что за долбоеб писал и что оно вообще делает.
Ну и для твоей задачи - вообще хуй пойми зачем это.
621 2782899
>>782848
Можешь кстати не декоратор сделать, а адаптер обычный.

Ну и да INPC - хуйня из под коня. Делай нормально тогда через реактивные события и автоматическую отписку.
622 2782905
>>778756
Что бросается в глаза:
- Вместо абстрактного класса с одним абстрактным методом в шарпах используют интерфейсы.
- goto в бизнес логике использовать грешно, переписывай без него.
623 2782999
>>782896
>>782899
все вызовы этих пропертей тоже в сторонних длл сидят...
624 2783022
>>782999
А. Чеж сразу не сказал. Ну, тогда да. Тебе только рефлексией и извращаться. Ну, еще ансейфа навалить придется и немного с илом поиграться.
Правда я не уверен все еще что стоит оно того и ты знаешь что делаешь.
625 2783034
>>782896

>Дополнительно - рефлексия это как ЭссКуЭль: пока пишьеш - просто понятно, когда через два дня посмотришь на это - будешь думать, что за долбоеб писал и что оно вообще делает.


Этот шарит. И за sql и за рефлексию.
626 2783067
>>783034
Чел. Я не знаю ты пытаешься рофлить или нет, но первые 3 года я работал администратором СУБД, лол. Писал хранимки, писал хуйню для SSRS, делал дохуя изъебистые выборки, оптимизировал то что работало медленно и прочей чепухой занимался.
И вот знаешь. Мое мнение - именно такое. Скуль - охуенно пока ты в контексте. Написать и забыть - охуенно. А вот если у тебя через месяц попросят модифицировать то что ты там написал - тебе проще нахуй выбросить все и написать с нуля, чем пытаться вспомнить. Блин. Да простейший пример- найти все дырки в таблице(т.е. есть в таблице последовательность значений, допустим целые числа от 0 до максимального в таблице, надо среди нее - все пропущенные значения выбрать). Делается в 4 строчки. Но сейчас я даже не вспомню как оно делается-то и уверен что даже те кто каждый день пишут SQL-запросы ручками - с ходу не напишут такой запрос без гугления.
627 2783091
>>783022
в том то и шутка, что угодно будет лучше, хоть черная магия.
там сейчас опрос всех пропертей ахуилион раз в секунду.
628 2783128
>>782848
Ну смотри. Если нет INPC то Wpf подписывается с помощью PropertyDescriptor.AddValueChanged

Это может вызвать утечку памяти, но в общем то это готовый велосипед
629 2783301
>>783067
Никаких рофлов. Полностью с тобой согласен. Еще в эту же копилку - регулярки. Их обычно уже через неделю бессмысленно разбирать и проще сразу в конструкторе собирать.
изображение.png39 Кб, 606x143
630 2783459
Платиновый неофитовый вопрос на счет зависимостей:
Есть главный проект (1), LoggerService библиотека (2), Contract библиотека (3). Между ними зависимости 1->2->3.
Вопрос, должен ли я видеть в первом проекте референсы третьего проекта? Пример, во втором проекте используется либа NLog, но в первый проект его не видит. В туториалах пишут пикрил, хотя я по прежнему ничего не вижу даже после этих действий. И еще пример, в третьем проекте у меня есть интерфейс который используется во втором. В первом проекте у меня используется класс со второго проекта в котором есть поле типа интерфейса с третьего проекта, но если я хочу его использовать в первом проекте - он не находит тип интерфейса.
Пока что я тупо в зависимостях на указывал ссылки на все дллки всех проектов, это норма?
image138x26
631 2783551
>>783459
кувалдировать пальцы которыми ты это дерьмо строчил
632 2783562
>>783551
Что сказать то хотел?
633 2783570
>>783551
Пошёл нахуй, даун.
634 2783633
Почему верхний класс выдаёт ошибку? Скопировал код из книги и решил так сказать переписать в развёрнутый конструктор. В итоге нихуя не работает. Сама ошибка: ОшибкаCS8862Конструктор, объявленный в записи со списком параметров, должен иметь инициализатор конструктора "this".
изображение.png48 Кб, 437x531
635 2783642
>>783633
Вообще нихуя не понимаю. Сверху написал ручками, а снизу код, который скопировал поправил немного
изображение.png50 Кб, 338x589
636 2783655
>>783633
>>783642
Я хуй знает, но походу ошибка была из-за отсутствия статического Main
изображение.png86 Кб, 663x816
637 2783713
>>783633
А нет, ошибка опять всплыла
638 2783716
>>783713
нахуя тебе этот record используй class
639 2783726
>>783716
Да я примеры из книги рассматриваю и вот чё-то вылезает эта ошибка
изображение.png14 Кб, 777x71
640 2783784
Слушайте, а это нормально с точки зрения читаемости кода?
641 2783847
>>783633
Потому что ты объявил так называемый primary constructor вот этой строкой: record Point(), () <-- primary constructor
Если он объявлен, в любых других конструкторах ты обязан его вызвать с помощью : this()
image5 Кб, 395x63
642 2783854
>>783784
Нормально, но можно лучше написать
643 2783942
>>783847
ААААА, всё, допёр. А я даже не заметил. Спасибо
644 2784109
Пишу архитектурный тест на зависимость.
Нужно проверить, что определенный тип от интерфейсы не создается/инъектится в неймспейс.
Как это сделать?
645 2784121
>>784109
Почему этот интерфейс тогда доступен в сборке? Звучит костыльно
646 2784133
Если нужно проверить конкретный неймспейс, то тебе придется пройтись по всем сборкам, из-за того что неймспейс можно писать где-угодно. В любом случае это несколько строчек рефлексии с линкю
647 2784143
>>784121
Смысл в том, чтобы человек потом вместо прямого вызова хэндлера использовал медиатр.
Не вижу тут ничего костыльного.
648 2784154
>>784143
ты не напишешь тест на хуйню аля
void ObrabotatZalupu()
{
var handlerZalupy = new HandlerZalupy();
}

ебаш DiagnosticAnalyzer который будет кидать репорт если найдёт использование типа
649 2784160
к слову, если я правильно помню, IRequestHandler<> не регается в di, медиатр создаёт инстанс через активатор, так что если речь только про иньекцию, то проблемы нет
но может я неправильно помню
650 2784170
>>784154
Спасибо. Тоже думал насчет трассировки.
А проверить импортированные типы вообще нельзя?
651 2784175
>>784170
Нельзя
652 2784178
Будет ли говнокодом добавление в класс метода AsInterface(), который приводит класс к интерфейсу, реализованному этим классом?
653 2784182
>>784178
Нет. Обычно экстеншн методы для этого пишутся
654 2784192
>>784178
А если класс реализует насколько интерфейсов?
655 2784296
как перестать писать лапшу и начать жить?
656 2784325
>>782461
Ага, я уже почитал. Тоже круто.
657 2784353
Пацаны, тут как-то упоминали не городить велосипеды с ICommand и, мол, есть готовые решения.

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

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

Но все же хотелось бы посмотреть другие реализации для общего ознакомления.
658 2784408
>>784353

> Нельзя биндить данные к параметру Execute, который сам по себе неудобен тем, что он object.


Про commandparameter не слышал?
659 2784480
>>784408

>commandparameter


он не позволяет биндить, это параметр метода Execute().
660 2784752
>>784353

>Нельзя биндить данные к параметру Execute


а надо?
никогда не нужно
у тебя есть вьюмодель - она содержит стейт. у меня все
661 2784953
>>783551
Короче я разобрался, я дебил - подключал сбилдженные дллки к мейн проекту, а надо было добавить проект к решению и затем добавить к мейн проекту ссылку на общий проект, тогда подтягиваются референсы с дочернего проекта.

Кстати вопрос, что сейчас вместо Microsoft.AspNetCore.Mvc? Он помечен как deprecated, но я чето пока не могу найти замены.
662 2785269
>>784953
<Project Sdk="Microsoft.NET.Sdk.Web">
663 2785612
>>784953
либо сдк как выше чел написал, либо FrameworkReference
547446456.jpg109 Кб, 735x490
664 2785814
Шарписты, объясните мне пжлст, как работать с отладчиком в вижуал студио?
665 2785831
>>785814
Всм? Берёшь и работаешь как и с подавляющим большинством дебаггеров в идешках.
Ничего необычного и странного нет в шарповом дебаге
666 2785838
>>785814
с периодическим возгоранием пониже спины.
667 2785851
>>785814
может тебе ещё рассказать куда код писать?
668 2785858
>>785851

>код писать


Нет, я просто хочу 4к$ получать, без этой вот хуйни
669 2785866
>>785858
А получишь только хуй.
670 2785871
>>785838
От экзепшенов высчитывания значений и залипаний?
671 2785898
>>785871
от убогости.
оно могло бы так https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode

а может почти ничего.

ну ок. в 22 студии НЕМНОГО сделали получше, но все равно убогость.
672 2785911
>>785831
>>785838
>>785851
Пошли на хуй

>>785858
Ты тоже на хуй иди, пёс
673 2785914
>>785898
Выглядит как решарпер под соусом другого цвета
674 2785920
>>785898
ух ты, выглядит прикольно
675 2785928
>>785920
только не работает в 22 студии нормально. В итоге при переходе на 22 студию пришлось отказаться и стало печально.

>>785914
решарпер вообще тут никаким боком. даже рядом не валялся.
676 2785930
>>785928
ну у них на сайте сказано что их купил датадог, так что в будущем будет 22студия

>решарпер вообще тут никаким боком. даже рядом не валялся


я кажется где-то видел, что брейнсы тоже собираются сделать такое
677 2785946
>>785930
да есть билд для 22 студии. давно есть
просто работает
а) не все фичи
б) регулярно виснет студия

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

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

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

> проще всего же сделать свич xx is yy, но это кмк уродство


Гоферы смотрят на это высказывание с глубоким недоумением.
682 2786231
>>786088
почему билдер принимает setting? а не конкретный тип
683 2786309
>>786088
Вообще хз твой пример
Это всё собирает IoC контейнер, а ему писать код не влом
684 2786314
>>786119
Берешь объект. Предаешь ему другой объект. Вызываешь на последнем методы, которые возвращают значения, которые как-то там высчитываются. Какой метод вызвать выбирай свичкейсом. Вуаля.

Можешь еще один из объектов в отдельную сборку вынести и подключить эту сборку к проекту, где мейн твой. Будет у тебя юзинг красивенький сверху. Сразу +10 очков к ощущению программы...
685 2786319
>>786120
я к сожалению не гофер
>>786231
заранее какой конкретный тип будет передан не знаю, поэтому подаю абстрактный, возможно на интерфейс заменю, но суть в том что мне хотелось бы чтобы к конкретному типу настроек создавался конкретный класс их использующий. буду 100% потом добавлять новые конкретные типы.
видимо все-таки придется словарь делать
686 2786320
>>786314

>один из объектов в отдельную сборку вынести и подключить эту сборку к проекту


подключить динамически, вот и говнокодплагины почувствуют (:
687 2786323
>>786319
Тот кто передаёт знает, что он передаёт setting1, а не setting2, почему этот код не может вызвать на билдере метод с нужной сигнатурой?
688 2786338

>>>>786088


ХЗ по теме или нет.
Но я бы как-то так сделал...
689 2786343
>>785998
Что мешало сразу скинуть мне ссылку и не выёбваться?

>Надеюсь на то, что ты не вкатишься


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

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

Эх.
691 2786375
>>786362

>просто так передать указатель на ту же функцию - не так просто


в шарпе для этого делегаты, проще простого
692 2786378
>>786375
Как я засуну делегаты в массив/стрим байт/интов?
Да. Можно в массив object засунуть но тогда тот код будет просто нечитем.
693 2786380
>>786378
Говнокод с твоего пика точно так же нечитаем, держу в курсе
694 2786382
>>786362
совковая школа цветёт и пахнет, ууух
695 2786393
>>786362
Чел, я с продуктами твоего обучения каждый день на работе сталкиваюсь. Нихуя они не будут знать ни про процессор, ни про регистры ни про стек с кучей. Пожалей жеребят. Учи прикладному чему-то, а не низкоуровневой хуйне, которая без пару лет практики на реальной работе все равно не усвоится.
696 2786407
>>786382
>>786393
Это же лаба для первого курса. Учить прикладным вещам, без базовых - странно. Вы же не учились рассчитывать ежемесячный платеж по кредиту - не освоив как складывать числа?
Прикладные вещи - со второго курса начинаются.

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

>напишите программу которая вычислит: "f(x) = sin(x)+tg(x) + 3.14 / 2


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

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

А некоторые знания тебе вообще никак не помогут. Все тут сидящие думаю постоянно оплачивают картами покупки но помогут ли им знания о протоколах бесконтактной оплаты и внутреннем процессинге банков?
703 2786637
Как реализовать обработку данных из очереди в другом потоке? Если просто запустить цикл while(true), то одно ядро будет постоянно загружено на полную. Если добавить Thread.Sleep(1), то обработка будет происходить не сразу, после добавления элемента в очередь.
704 2786676
>>786637
Она в любом случае не будет сразу происходить.
Если для тебя эта 1мс прям так критичен - пихай в тредпул обработчик и все.
705 2786707
>>786637
Берешь ConcurrentStack. Хуяришь TryPop в while(true), другими потоками делаешь Push. Вот тебе продакшен реди решение, не благодари.
706 2786740
>>786707
>>786637

> одно ядро будет постоянно загружено на полную

707 2786755
>>786740
Прокинь AutoResetEvent в бесконечный цикл и в метод, где у тебя push происходит. Пусть луп поток ждет сигнала в waitOne(). Когда кто-то добавит элемент в очередь он вызовет .set(). Луп поток разблокируется и выполнит TryPop. Затем опять вернется на исходную, ожидая вызова .set().

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

А эти вот Channel - там задержка такая, что под микроконтроллеры брать ни в коем случае нельзя.
710 2786851
>>786847

> TaskCancellationSource


TaskCompletionSource конечно. Чет в голове слегка смешалось пока писал.
711 2786860
>>786847

>Чел хочет чтобы задача сразу после попадания в очередь начинала выполняться.


В каналах есть специальная опция для этого allowSyncCompletion
712 2786863
>>786847

>Скорее всего он пишет свою RTOS на шарпе. Или под микроконтроллеры что-то программирует


Из его поста это никак не вытекает. Больше похоже, что он пытается в велосипед, когда уже есть датафлоу или те же каналы.
713 2786864
>>786851
TaskCompletionSource тоже с оверхедом, тогда уж ValueTask надо использовать
714 2786954
Объясните к чему именно идет биндинг.
Допустим у меня есть свойство типа FileInfo. Само свойство вызывает событие INotifyProprtyChanged, но привязаться мне надо к FileInfo.Name, в котором вряд ли реализован INotifyProprtyChanged.

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

Как ведет себя привязка? Она биндится к FileInfo, а затем ищет внутри свойство Name, или же биндится напрямую к Name?
715 2787019
>>786637
ужас
BlockingCollection для этого и придуманы
для async Channel
Для любителей пониже уровнем могут лепить свое с AutoResetEvent и другими примитивами синхронизации.
716 2787142
>>786418

> принцип работы


Уравнения Максвелла напиши мне. Без гугла.
717 2787255
Тут кто-нибудь работал со SkiaSharp? Возможно ли в нем рисовать вне Ui потока? В Win2d такое дозволяется, если использовать CanvasSwapChainPanel.
718 2787456
>>787255
Я работал. Что значит рисовать вне UI потока? Ты понимаешь, что такое UI-поток? Рисовать вне его - невозможно, если ты хочешь увидеть результат своего рисования. Возможно, если ты с результатом делаешь что-то еще, типа сохраняешь в битмапу - в таком случае просто создаешь канвас и рисуешь лол.

Если ты имеешь ввиду есть ли для SkiaSharp контролы под UI либы - есть, под все шарповые вроде.
719 2787566
>>787456
Он про то что искусственное ограничение на работу с юи в один поток лишь от отсутствия блокировок и синхронизаций и что в либах где они заимплеменчены можно не заморачиваться
720 2787588
>>787456

> Я работал. Что значит рисовать вне UI потока?


То и значит, берешь и рисуешь в любом потоке, как я уже писал CanvasSwapChainPanel позволяет это. К тому же в Uwp помимо ui потока есть еще и поток Composition, так что никаких проблем с отображением результата нет.
721 2787589
>>787588
Вот собственно документация

> 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

722 2787641
Аноны, как в впa ошибки отлавливать
Я пока решил не использовать MVVM, потому что в моем интерфейсе литералли 2 кнопки и мне нужен текст элемент, чтобы ошибки показывать.
В инфраструктуре есть класс GoogleLensUploader, который имеет метод UploadImade принимающий byte[] и вызывает несколько других методов, которые отсылают запросы и возвращают string.
Также в инфраструктуре я разместил кастомный json converter и враппер, который принимает этот конвертер и возвращает мож модель TextRow из домена.
Вся эта хуйня через dependency injection используется а application слое, который уже и используется в моем mainwindow.
Так вот, как в таком проекте ошибки отлавливать и рендерить из на текстовом элементе юзеру?
723 2787645
>>787641

> впа


впф*
Ну и да, в интерфейсе буквально 2 кнопки, само mainwindow принимает ClipboardMonitor и подписывает метод на его эвент, который говорит, обновился ли буфер обмена и есть ли в нем картинка.
А 2 кнопка отписывает от ивента.
724 2787701
>>787588
Синхронизация все ещё есть, просто на уровне DXGI и DirectX.

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

В итоге сейчас да, в xaml контролы нужно рисовать по макету.
725 2787702
>>787701

>по ивенту



быстро фикс
726 2787751
>>787701
>>787702
Вижу ты в этом хорошо разбираешься. Можешь посоветовать какую-нибудь литературу по теме?
727 2787790
>>787641

>Аноны, как в вп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] Просто информация
и так далее ...
Сам формат вывода информации: уровень, время, путь к классу — все это настраивается и ты можешь что-то убрать, или же добавить. Так же ты можешь писать логи параллельно в текстовый файл и в окно юзера — тоже на разных уровнях. Вариаций масса.
727 2787790
>>787641

>Аноны, как в вп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] Просто информация
и так далее ...
Сам формат вывода информации: уровень, время, путь к классу — все это настраивается и ты можешь что-то убрать, или же добавить. Так же ты можешь писать логи параллельно в текстовый файл и в окно юзера — тоже на разных уровнях. Вариаций масса.
728 2788212
>>787751
Из литературы по сути ток документации по графическим апи и может быть статьи по типу "как устроен vulkan". Я когда вкатывался, у меня долгое время было плато непонимания чо происходят нахуй, но потом втянулся. Рекомендую не начинать с opengl, хотя в инторнетах пишут обратное.

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

Если есть какие-то конкретные вопросы, можешь задавать, постараюсь развернуто ответить.
729 2788215
>>788212
Можешь скинуть ссыль на репу? Интересно было бы посмотреть.
730 2788220
>>788212

> WinUI3


Если не секрет, отчего такой выбор? Вроде как самый сырой и медленный XAML фреймворк.
731 2788281
>>788215
как то так - https://github.com/malstraem/vulkan-interop-directx

>>788220

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



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

Если есть требования или перспектива кросс платформы, то лучше Avalonia выбрать, они как раз недавно жирный апдейт выкатили. Мы просто когда стартовали новый проект на работке - из требований заказчиков (аэропорты в основном) была только шинда, они все на ней сидят и сидеть будут.
изображение.png240 Кб, 1920x1040
732 2788284
Я просто создал пустой проект Xamarin.Forms и попытался запустить его, ничего в нём не меняя. В чём проблема? В уебных роликах и статьях всё нормально. Использую VS 2022 Enterprise.
733 2788481
>>788284
потому я и выучил котлин для андроидов
734 2788554
>>788284
Нужно попердолиться, почистить проект, иногда вручную поудаляв build, obj, поискать версию maui на предмет таких issues на гитхабе. Там анон говорит, что котлин выучил – я могу его понять. Хотел поиграться, но такие косяки отталкивают. Да и сам фреймворк какая-то срань – в 2023 году столько бойлерплейта, XAML с его допотопным синтаксисом. После этого реакт и css ощущаются как космолёт. Но это веб
изображение.png24 Кб, 334x274
735 2789095
Блин, шаблоны прикольные штуки, но как-то их непривычно юзать. Собственно вопрос: вы часто юзаете такой синтаксис? Или лучше как обычно писать свич и возвращать из метода через return
736 2789102
>>789095
Когда удобно тогда и юзаю. На тех кто не осилил прочитать релиз ноты по версиям шарпа чихал
737 2789145
>>789095
База. Лист паттерн матчинг и возможность объявлять переменные если они попадают под условие - мега охуенно.
738 2789179
>>789095
Мням-ням, сахар
739 2789202
>>789095
Свич использую в основном для enum, а там все просто:
Я использую сниппет свича, который автоматом расставляет кейсы, дальше я его заполняю и студия предлагает превратить в шаблон.

По сути я ничего не делаю для этого. В чем дилемма? Выглядит компактнее, а большего и не надо.
740 2789705
Мне дали тестовое задание сделать калькулятор webapi с эндпоинтами для всех операций и одним эндпоинтом для того, чтобы вычислить сложное выражение.
Они же хотят, чтобы я сделал модели для этих операций, присобачил к ним валидацию и потом их реюзнул в последнем эндпоинте, да?
741 2789727
Предложили на российском проекте (удаленно) тимлидом 450 тысяч рублей, это в долларах кучерявее, чем предлагает любая компания-аутстаффер, выгребающая релокантов в Грузии. И готов согласиться, но тут пишут такое: https://www.profinance.ru/news/2023/07/28/c9mu-rubl-upadet-nizhe-minimuma-marta-2022-goda-ekspert.html
742 2789742
>>789705
Непонятно, как будет выглядеть этот калькулятор. Может быть, там надо распарсить строку? Тогда зачем вебапи, неужели просто один аргумент принять?
743 2789747
>>789742
Ну тип стучишься на эндпоинт /calc/pow даешь ему 2 числа и он тебе высылает ответ, либо говорит, что ты мудак.
Все тоже самое с другими простыми операциями, но последняя типа должна их всех объединять, насколько я понимаю.
Вот ток я думаю, че они именно хотят, чтобы я им показал.
744 2789888
>>789747

> объединять


Как? Передавать название операции отдельно?

> я думаю


Зачем думать над мутным условием, если можно и нужно спросить, что они имеют ввиду?
745 2789929
>>789705

>вычислить сложное выражение.


>Они же хотят,


Ты уже обосрался с тестовым. Никогда не угадывай того, что хочет заказчик. Если есть непонятка - значит нужно уточнить.
Очень часто в тестовых делают такие мутные места, чтобы посмотреть как поведет себя кандидат.
Поэтому сначала прорабатываешь, придумываешь два...три возможных варианта (чтобы их предложить, а не тупо спрашивать "я ни понил") и задаешь вопрос тому кто выдал тестовое.
изображение.png92 Кб, 755x636
746 2790103
Что опять сломалось в этой хуевине?

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

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

Если не знаете как исправить ошибку, может подскажите как ее спрятать?
747 2790202
>>789705
чел, от тебя просто хотят получить решение рабочей таски, никогда не делай тестовое, если оно не оплачивается
748 2790241
>>790202
да ну. кому нужен вебкалькулятор
изображение.png78 Кб, 695x715
749 2790395
Блять
750 2790502
>>790395
Нечего гкглить на русском.
751 2790785
>>789095
Использую, где это удобнее.
Всякие бизнес-руллы, где правила в духе: Если последний раз был больше недели назад, но меньше чем 3 недели и при этом является привилегированным пользователем, со знаком зодиака рак - то это, если ...
Ну ты понял. Вот в таких случаях - все эти охуенные правила удонбо запихнуть в tuple и достать нужный обработчик, чтобы дергнуть.
Еще, если просто у нас в зависимости от типа объекта - надо куда-то передать, то диспечер такой хуйней удобно мутить.

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

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

var x = some match
{

> 0 and < 10 : "Ok",


default : "Ne Ok"
}
изображение.png133 Кб, 930x1057
752 2790833
>>790395
мы все о тебе поняли
753 2791071
Как понять третий пункт?
754 2791073
>>791071
На пике все работает
755 2791110
Можно в студии как-то пометить папку в обозревателе решений, чтобы она не участвовала в автоматическом создании неймспейса?

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

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

Так вот, есть ли какой-то волшебный префикс, который говорит студии don't do that.
756 2791123
>>791110
В решарпере есть надстройка для исключения папки из формирования неймспейса в идее тогда тоже должно быть. Голая студия такое себе
757 2791227
>>791123
Черт, ну ладненько
758 2791770
шарпаны, что сейчас можно использовать самое легковесное если я хочу к консольной программке прикрутить гуй? без завитушек, просто окошки, не кросс платформа. WPF?
759 2791773
>>791770
Винформы.
760 2791837
>>791770
Рисуй ui в терминале. Самый быстрый путь
761 2791931
>>791770
Формы > wfp > winui3
762 2791964
>>791071
Попробуй теперь к базовому классу скастовать свой Kuk
763 2791967
>>791770
Винформы либо WinApi легковеснее не придумаешь.
764 2792070
>>791773
>>791837
>>791931
>>791967
что по авалонии скажете? там вроде бы новая версия недавно вышла модно-молодежно
765 2792071
>>792070
Ничего. Я либо cli/tui тулзы пишу либо вебовый гуй. Когда то немного ковырял впф но мне он показался оверинженереным
766 2792087
>>792070
Авалонию надо долго сидеть и изучать, она для реально большого и сложного проекта, далеко выходящего за "прикрутить гуй к консольной программке".
767 2792398
>>792070
это если тебе нужно кросс
иначе не нужно. Да и шрифты у нее хреновые.
изображение.png358 Кб, 1477x700
768 2792566
769 2792584
>>792566
Шиз, таблетки.
изображение.png98 Кб, 845x610
770 2792847
Всем привет. Скажите, пожалуйста, почему этот код не вывод в браузер текст? У чела, который показывает как сделать сервак с нуля данный код вывод текст на страницу. Может разница в версиях .net? Сам чел https://www.youtube.com/watch?v=Al2mZg_-XQk
771 2792852
>>792847
Мне лень открывать говорящие головы но с уверенностью могу сказать что на скрине лажа. Браузеру нужно хттп а не хелло в ответ.
Если ты приконектишься на порт условным телннтом или нц то он выведет
772 2792858
>>792852
Эт я уже вычитал на StackOverflow. Прикол в том, что у него всё работает, а у меня нет. Думаю на той версии, которая у него можно было. А на .NET 7 уже нельзя. Хотя странно, вряд ли за такой короткий промежуток времени могли что-то сильно поменять
773 2792879
>>792847
Нет, дотнет тут вообще не при чём. Это у того чела кривой браузер, а у тебя нормальный.
774 2792885
>>792879
Походу мазила с 2021 года что-то обновила и стало работать так, как сейчас. Спасибо за ответ
775 2792911
>>792858
Не в дотнете дело. Это НЕ могло никогда работать. Максимум что могло быть это какой либо браузер работает специфично
.png23 Кб, 988x696
776 2792929
>>792847
Делай как я! Не хочу быть единственным в треде, кто такой хуйней занимается.
777 2792934
>>792929
Ты единственный в треде, кто такой хуйней занимается.
778 2792940
>>792934
ВОТ УВИДИТЕ! Я СДЕЛАЮ СВОЙ ТЦП ФРЕЙМВОРК ДЛЯ СЕРВЕРА, КОТОРЫЙ БУДЕТ УДОБНЫЙ КАК МИНИМУМ ДЛЯ МЕНЯ!

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

Короче. Да.
779 2793309
>>792940

>рефлексия ацтой!


только для тех кто не умеет ее готовить.

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

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

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

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

В общем то ничего сложного.
.png105 Кб, 916x683
780 2793389
>>793309
Я вот так примерно делал.

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

Ну и про сложность. Не сложно. Просто у меня после какого-то времени - возникла мысль, что это становится похоже на магию и правильнее обязать того кто пользуется - реализовывать интерфейс IDispatcher<TContext,TMessage> и заставлять свой диспечер сообщений к серверу цеплять, а там человек как ему удобно так и задиспечеризирует сообщение.
изображение.png30 Кб, 485x156
781 2793467
Слушайте, а как сконфигурировать http ответ от сервера, если я хочу отправить текст на страницу в браузер. Пока что написал вот это:
782 2793470
>>793467
Скорее вопрос в том, какой заголовок отвечает за тот текст, который я хочу отправить. Типо в какой заголовок этот текст засунуть, чтобы потом вытащить на страницу в браузере
783 2793475
>>793470
Тебе то что отобразится не в хэдеры нужно пихать а в боди. curl -v тебе в руки и rfc по http 1.0/1.1
784 2793518
>>793475
Всё, я понял. То, что находится снизу заголовков - тело. В прицепи логично. Почти как в хтмл структура
image.png732 Кб, 1001x582
785 2793857
В конце 2022 я ушёл от стека CRM Creatio от Террасофт (бэк на дотнете, фронт на JS). Так как прекращал отношения с российской фирмой, так как накапливались сложности с переводами деняк за рубеж (это был мой второй проект из двух параллельных).

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

Тема крутая, финтех и доллары, но как при этом развиваться? На проектах Creatio я даже нормальных юнит-тестов не встречал, не говоря уже про работу с мультипоточностью и всякие фишки поздних версий .Net. И фронт там сейчас неакутальный, ExtJs, а я хочу погрузиться в божественный Ангуляр.
786 2793918
>>793389
ну выглядит и выглядит. лишь бы работало. Ну разве что медленно ибо рефлексия.

хотя я бы не делал в RouteDescriptor сам вызов, да и Func<MethodInfo тоже
787 2793963
>>793918
По уму рефлексия один раз при старте отрабатывает и потом уже переиспользуются результаты либо генерится на их основе ил
788 2794286
>>793857
В Восточной Европе больше половины вакансий на .Net это .Net Core + Angular (в разных вариациях, но суть та же). 5к чистыми, ты тут не получишь, но если ты весь из себя синьор-помидор, то может и 6 вытянешь, в среднем около 4.
Хочешь больше? Ищи клиента в штатах/Канаде. Собственно я так и сделал, клиент в Канаде за 6 и местный за почасовую ставку, обычно 2-3,5к/месяц.
Развиваться норм, если писать на коре, то всё хорошо поддерживается. Если команда норм, то проект будет сиять от новых технологий и 90% покрытия тестами.
789 2794516
На днях у нас в компании решили пересадить всех разрабов на линукс. Сказали что те кто будет работать под виндой и жаловаться на баги вследствие перехода на линукс будут получать пизды. Какие подводные, там же разницы нет где собирать проект? Asp dot net + Blazor
790 2794614
>>794516
Выстрелит какая-нибудь древняя залупа, которой нужен COM.
791 2794629
>>794516
Накатываешь на студию/vscode/райдер нужные плагины. Разрабатываешь на винде, собираешь на винде, деплоишь по SSH на линукс, запускаешь там, цепляешьшся к работающему билду, дебажишь из под винды и в хуй не дуешь.
792 2794657
>>794629
В студии из коробки есть вариант прозрачного запуска под всл
793 2794677
>>794516
а чем они эту мочу в голове оправдывают?
794 2794707
Что значит deleage {} ?

> static event EventHandler Changed = delegate { };

795 2794744
>>794677
Не знаю как у него, но сейчас в компаниях, которые имеют дело с гос сектором или разрабатывают для компаний которые работают с гос сектором - опять пошла пьянка, что сертификация винды - усе, пересаживайтесь на какую-нибудь астру или пиздуйте.
>>794516
Ну, прям критично - ничего. Особенно если райдер есть. Но блядь. Насколько же студия - удобнее.
image.png20 Кб, 183x151
796 2794772
В ру сегменте есть шарп сообщество на ютубе (возможно единственное, слушаю их за новости), так те упоролись и начали пилить видосы по расту, ну собственно восхищаться им (за деньги или сами "осознались", непонятно).

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

Как это работает? Чем больше тебя язык ущемляет, загоняет в рамки и заставляет себя чувствовать не комфортно, тем сильнее ты его любишь и считаешь его правильным?
797 2794783
>>794772
Эту кучку пидорасов нужно выгнать нахуй с канала посвященному дотнету. Пусть валят на свои каналы по расту, раз не хотят пилить конент по дотнету.
798 2794806
>>794772
>>794783
А что за канал? Как называется?
799 2794807
>>794772

> Как это работает? Чем больше тебя язык ущемляет, загоняет в рамки и заставляет себя чувствовать не комфортно, тем сильнее ты его любишь и считаешь его правильным?


Та не.
Просто раст типа на хайпе.
Хотя сам раст - то еще говно ебаное.
Вот срсли. Хуй пойми нахуй он нужен. Те области где он типа нужен - на си нормально живут и будут жить дальше без раста.

Вот F# - тема. Как мне грустно, что сколько не пытался в прод запихнуть - никто не хочет. Приходится грустно в стол дома на нем чет делать. А ведь блин. Ну охуенный же язык. И .net никуда не девается. Но нет. F# не будем юзать, хоть ты тресни, и никакие аргументы не работают.
801 2794923
>>794707
значит подписан пустой делегат, чтобы при вызове события не проверять на null потому что он никогда не будет null

>>794807

>на си нормально живут


ага. только постоянно находятся ошибки связанные с переполнением памяти и тому подобным.
2023-08-0515-12-31.png24 Кб, 1002x164
802 2795071
Почему я не могу вызвать событие "PropertyChanged" в ObservableCollection?

Сначала студия ругалась, на это
public event PropertyChangedEventHandler PropertyChanged;
якобы такое событие уже есть. Но я не могу его вызвать, символ молнии события помечен "звездочкой". Что это?
803 2795120
>>795071
Потому что эвент можно вызвать только с класса, на котором он объявлен.
804 2795496
>>795071
Чо ты пытаешься сделать лол. Как уже написали, событие может вызвать только его владелец, то есть даже наследник класса не сможет инвокнуть ивент родителя. Потому что - как ты себе это представляешь? Объекты поднимают ивенты согласно внутренней логике когда меняется какой их стейт - тебя нельзя вмешиваться в этот процесс, в этом смысл ивента и в целом паттерна наблюдатель.
805 2795582
>>795496
ну технически есть виртуальные события, но их нужно уметь готовить
806 2795671
>>795582
Это очень кривая хуйня, никогда так не делай или будешь избит коллегами. Но даже так это все ещё два разных события, просто в откройте ты руками через add и remove подписываешься ещё и на базовый ивент.

Для того чтобы у наследника была возможность поднять ивент - просто оберни вызов в метод.
807 2795672
>>795671

>откройте


оверрайд

быстрофикс
808 2795699
>>795671

>Это очень кривая хуйня


что удивляет почему так
почему при вызове виртуального метода ищется оверрайд метод и он вызывается
А вот события сделали через жопу. Зачем вообще слово виртуал если оно таковым не является

это еще одно в копилку "разрабы шарпа - рукожопы"
809 2795703
>>793309

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


Избежать, сорс генераторами, в нет8 над этим работают
810 2795704
>>795703
только это не будет первым вариантом.
811 2795706
>>795704
минимал апи это не первый вариант?
812 2795707
>>795706
речь вообще не про минимал апи
соурс генератор должен на что-то опираться для генерации вызовов хедлеров контроллеров и генерации биндеров для них.

самое банальное - навесить аттрибут (собственно они и есть)
подход "ты поищи по исходникам вызовы Add нужной сигнатуры у нужных типов и на основе их генерь" даже не знаю возможен ли, но точно нерентабелен.
813 2795710
>>795707
зачем тебе атрибут на метод, который ты сам контролируешь? в восьмом аспнете mapX подменяется сгенерированным экстеншеном

https://andrewlock.net/exploring-the-dotnet-8-preview-exploring-the-new-minimal-api-source-generator/

>но точно нерентабелен


хаха ну да
814 2795715
>>795710
это все равно упирается в "найди все вызовы MapX в коде, где бы они не были"

А вообще я не делаю особой разницы между рефлексией в рантайме и тем же самым при написании соурс генератора. Разница то просто в виде рантайма - сама софтина работает или билдер. Все равно пиши код вида "найди мне вот это с этими типами/аттрибутами и сгенерь для него код/il"
815 2795719
>>795715

>Разница то просто в виде рантайма - сама софтина работает или билдер


Билд происходит один раз.
Разница в производительности и конкретно сколько времени занимает старт. Для веба, который сейчас повсеместно в контейнерах на каких-нибудь подах с хуй да нихуя cpu, это особенно важно. Сюда ещё идёт размер сборки, с рефлексией тримить очень сложно и опасно.
816 2795722
>>795719

>Билд происходит один раз.


как и генерация этого же самого в рантайме.
и по сравнению с тем сколько времени жрет EF на свой запуск это ничтожно.
Как тот же DI - где его соурсгенераторная версия? че майки ее не делают?

трим понятно, но это ж асп.нет. кто его триммит то.
817 2795736
>>795722

>и по сравнению с тем сколько времени жрет EF на свой запуск это ничтожно.


С пробуждением, для ef'а тоже пилят компайлед моделс.

>как и генерация этого же самого в рантайме.


Вот это всё накапливается и получается что время до обработки первого запроса в минутах исчисляется, это пиздец. Горизонтальное масштабирование хорошо работает только когда воркеры быстро стартуют
818 2795744
>>795736

>С пробуждением, для ef'а тоже пилят компайлед моделс.


я его не использую. я как увидел время запуска так охренел. оно неприлично огромное. Может для асп.нетов это и допустимо (какая разница сколько оно стартует) - для других проектов нет.

>время до обработки первого запроса в минутах исчисляется, это пиздец


и 99.99% этих минут составляет EF )))
819 2796270
>>795496

>Потому что - как ты себе это представляешь?


В бейсике такой проблемы нет. Как я себе это представляю? В наследнике появляются новые свойства. Как они будут уведомлять о своем изменении? Как? Делать перегрузку эвента? Затенять? Переопределять?

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

Я уже молчу про то, что компилятор благодаря "прекрасному" синтаксису шарпа не понимает, что происходит вызов события и раздает неуместные советы. Клянусь, вот эти вот "+-" ":" самое гнусное изобретение майкрософт.
820 2796300
>>796270
Хуже асинк войда ничего нет.
821 2796306
>>796300
Как иначе использовать async в обработчиках событий?
822 2796328
БЕЙСИКА НЕ СУЩЕСТВУЕТ
823 2796366
>>796270
Опять ты со своим бейсиком рвёшься? Сиди на нём и всё будет по старому
824 2796379
>>796270
Бейсикоблядь, спокуху оформи.
825 2796476
>>796270
кто тебе не дает? специально для таких случаев есть PROTECTED методы вида OnCollectionChanged
и в ObservableCollection он даже virtual
826 2796559
Шарписты, я стараюсь написать строчку, которая извлечёт один из элементов массива с конца Console.WriteLine (myArray[^2]);
Так вот. На вот это ^2, вижуал студио ругается и говорит, что такая шляпа прокатит только в C# 8. Я так понимаю, что C# 8 не доступен в бесплатной версии с сайта майков, так?
827 2796585
>>796559
myArray[myArray.Length - 1]

И никаких зумерских фич не надо.
828 2796597
>>796559
Всё доступно. У тебя в csproj выставляется версия как рантайма так и языка (можно использовать старый рантайм но включить фичи языка которые при компиляции только используются). Смотри что там и меняй. Актуалочка сейчас это net6.0 и net7.0
829 2796599
>>796270
Дурачок, у коллекции (нахуя от нее наследуешься кстати, шиз?) есть методы для подъема событий, специально для таких шизов как ты.
830 2796742
>>796597
Можешь пошагово объяснить чаво и куды?
831 2796768
>>796585
Мде? А если отчёт с конца списка нужен?
832 2797049
>>796768
Count - 1
833 2797355
Лямбды это просто такой сокрашенный синтаксис или у них есть какое-то особое предназначение, которое без лямбд больше нельзя никак реализовать и для которого эти лямбды и придумали?
834 2797360
>>797355
ну попробуй без них - на каждый чих заводи именованный метод, который нужно где то разместить. Или в классе разместить или прямо тут в методе (шарп это позволяет) - все равно это будет "где то там".
835 2797371
>>797355
Да без любых высокоуровневых фич можно обойтись. Ты же не думаешь, что без лямбд язык перестаёт быть полным по Тьюрингу?
836 2797382
>>797355
Лямбды охуенны, чел.
837 2797397
>>797360
>>797371
Ну то есть просто сокращенный синтаксис?
838 2797401
>>797397
Не сокращенные, а безымянные функции создаваемые "на месте". жаль что с классами так нельзя как в котлине (анонимные классы совсем не то)
839 2797419
>>796742
Он пиздит. Там пейвол.
840 2797425
>>797401
Безымянная функция может что-нибудь такое чего не может обычная?
841 2797426
>>797425
Лексическую область видимости захватывать умеют.
842 2797432
>>797426
Обычные тоже умеют
https://metanit.com/sharp/tutorial/3.54.php
843 2797437
>>797425
я ж написал - она может не иметь имя и быть создана "in place"

любые функции с именем должны
а) иметь имя
б) будут размещены не на месте использования, а где то в другом.
844 2797449
>>797432
Да, потому что локальный метод это сорт лямды.
845 2797450
>>797449
(хотя в некоторых случаях наоборот)
846 2797453
>>797425
если тебе так сложно. то считай ее сахаром.
ничем она от обычного метода не отличается - ведь компилятор услужливо за тебя при компиляции даст ей имя и впишет в класс.
847 2797454
Похуй короче, сорта говна.
848 2797470
>>797437
Лол. Я точно также могу тебе расписать чем
i += 10 отличается от i = i + 10
а) не нужно второй раз писать i
б) знак + находится рядом со знаком = и его не нужно искать где-то в другом месте после имени переменной

И чо, давай тогда += называть какой-нибудь сигмой.
849 2797480
С чего начать?

> Прежде чем пытаться написатьICanvasImageInteropреализацию, рекомендуется хорошо понимать D2D, Win2D, COM, WinRT и C++.

850 2797481
>>797470
спросили я ответил
если чел САМ НЕ ВИДИТ отличий от обычной функции и не может понять зачем в язык ввели лямбды (даже в богомерзкую жаву), и начинает искать скрытый смысл, то я ему и указываю на суть.

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

>i += 10 отличается от i = i + 10


>а) не нужно второй раз писать i


и да. именно этим оно и отличается. и это его суть. и именно для этого оно и было введено

>давай тогда += называть какой-нибудь сигмой


а почему нет. оно также имеет собственное название - addition assignment
851 2797485
>>797480
Начать с другого треда.
852 2797490
>>797485
Я же на шарпе пишу...
853 2797495
Поясните за такой момент. Студия помогает мне инициализировать свойство в конструкторе, при этом свойство это расширенное (допустим string MyProperty), которое задает\берет значение из приватного поля string myProperty.

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

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

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

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

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

Допустим в свойстве есть какая нидудь логика, и нужно инициализировать значение именно через него, но как сделать по красоте, чтобы студия не ругалась? Без подавления предупреждений.
854 2797498
>>797495
не делает она этого
855 2797515
>>797495
Вот так сделай:
private string myProperty = string.Empty;

Или если оно может быть null:
private string? myProperty;
2023-08-0721-22-54.png35 Кб, 1126x560
856 2797524
>>797498
Вот пикрил.
Самое интересное, что если имена не совпадают, то предлагает на выбор назначить полю или свойству.

>>797515

>private string myProperty = string.Empty;


Но это же лишнее действие.

>Или если оно может быть null:


Не может т.к. в конструкторе запрашивается. По идее назначив non nullable стринг свойству, поле в принципе никак не может быть null, но студия просто тупорылая как утюг.
857 2797527
>>797490
Теперь ты пишешь на C++.
858 2797529
>>797524
Это должно решаться проверкой value в сетере на нал. Но кумпилятор не умеет это регистрировать. Костыль.
859 2797533
>>797524
ну так ты сеттер сделал. сеттер на то и сеттер что сеттит. Это правильное предложение - щас сеттер пустой, потом нет, а значит разумнее делать через сеттер в общем случае. Ну а если разраб такой "мне виднее" - ну пусть сам и делает

с другой стороны, решарпер предложит инит приватного.
860 2797746
>>796559

> только в C# 8


В смысле? Восьмая версия шарпа вышла 4 года назад.
861 2797749
>>797746
Значит, прошло 4 года, а восьмой шарп можно только купить?
862 2797826
>>797749
Да. Нужно заплатить на курсах 100 тыс миллионов чтобы они научили как скачать сдк.
Все прошли через это
863 2797972
>>797826

> Нужно заплатить


Но из России этого сделать нельзя!
864 2798306
>>797972
это можно сделать везде. можешь хоть мне купить остров в океане, а я тебя научу гуглить.
865 2798496
Надеюсь тут есть те, кто недавно смог вкатиться в джуны на аспах. Умоляю, поделитесь историей успеха. Как оформляли резюме и часто ли приходили приглашения?

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

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

Полагаю, проблема в целом в моём резюме, раз за пару месяцев мне ответили с приглашением только одна компания. Так что подскажите, анончики-джуны, как вы сваяли своё резюме так, что оно привлекло хоть какое-то внимание, и какими пет-проектами щеголяли?
866 2798797
>>796559
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. Пользуешься ренджами
867 2798814
>>798797
Зря старался, чувак. Тот чел все равно нихуя не поймет.
868 2798837
>>798814
Я просто практикуюсь. А то немного надоело что отдел сопровождения ругается, что недостаточно подробно инструкции по развертыванию и эксплуатации пишу
.png97 Кб, 767x824
869 2798851
>>797355
Это не то чтобы синтаксический сахар. Потому что если так рассуждать - все конструкции любого языка - синтаксический сахар.
Тебе никто не мешает без циклов, вызовов и прочего писать на голом ассемблере. Просто последовательно:

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

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

Ну а конкретно про лямбды. Без них - ты бы писал кучу однотипного кода на каждый чих. В джава, допустим - довольно долго так вот и приходилось жить. Можно ли так жить? Можно. Хорошо ли тратить свое рабочее время на написание однотипного кода, который можно написать лямбдой - я хз.
870 2798856
>>798851
Блин. Да. Нафиг я выдумал бизнес-задачу, и при этом не реализовал ее решение.
Пока вспоминал как там в ассемблере условные джампы делаются - забыл про то что надо день рождения учесть. Лалка просто.
871 2798860
>>798856
В отделе сопровождения не брешут. Тебе есть куда расти, чувак...
872 2798864
>>798860
Я знаю((( Но блин. Вот конкретно инструкции и документация. Ну блин. Аааааа. Все ж и так понятно. Положил docker-compose, docker-compose up -d, все. Дальше - методом тыка - разбирайся с программулиной. Преврати это в игру! Не. Не хотим. Хотим чтобы была инструкция че и как сделать, где скачать, какие галки поставить. Ууууу. Уууу!
873 2798871
>>798864
да да, докер на винде. ага.
от одного размера образа сердце прихватит
874 2798877
>>798871
Так в сопровождении - просто надо уже готовые образы развернуть из своего реестра.
А я постарался, что конечные образы 75-80 метров, так что прям страшно быть не должно.
875 2798890
>>798877
и что с ними под виндой делать?
876 2798914
>>798890
Как минимум - под виндой нужон докер при разработке. Ставить сбоку виртуалку - такое себе. А за дуалбут на рабочем ПК тебе ИБ вломит.
Ну и к моему удивлению - куча клиентов имеют WinServer и не хотят с него слазить. А без докера - разворачивать 100500 сервисов та еще боль и для сопровождения и для разраба когда его привлекают, и потом для клиента.
456456452.jpg167 Кб, 1280x720
877 2798965
>>798814
>>798797
Я на самом деле нихуя не понял, но всё равно спасибо.
878 2798997
>>798914
я клиент. у меня винда. я попросил инструкцию по развертыванию софта. А мне "вот тебе докер образ", который непонятно как ставить на винду (давно докер под винду появился а????), да еще этот образ содержит в себе еще одну винду.
879 2799071
>>798997

> давно докер под винду появился а????


Давненько. Есть даже чисто виндовые имэджи
880 2799173
>>799071
ага. это тот который использует hyper-v, включение которого ломает виртуалбокс.
уносите.

А размер виндовых имаджей я как то видел. И охренел.
Может чего изменилось ведь докерхаб услужливо не показывает размеры, но чет сомневаюсь я. Это ж винда. Она даже тини весит епрст.
881 2799176
>>799173
Вопрос стоял в возможности а не в целесообразности.
Так то нахуй надо докер в винде держать если давно всл2 работает ещё и с гпу
882 2799181
>>799176
Ты ещё скажи, что нет смысла ставить докер на сервер с линуксом.
883 2799424
>>740238 (OP)
Шарпаны, подскажите можно ли в xUnit сообразить такой тест, который будет проверять используется ли в сборке какой-либо метод или свойство определенного класса?
Например я хочу, чтобы в сервисе нигде не использовалось свойство DateTime.Now. И хочу чтобы тест это проверял. Это реально?
884 2799881
Скомпилил я ваш шарп "в один бинарник", мало того что все равно в один бинарь не собрался (там еще какие-то dll рядом положил), так еще моя утилитка весит больше 150мб. Такое себе для каждой утилитки.
Это, конечно, звездец рантаймище, нахер оно вообще надо все, когда есть современные кросс-компилируемые языки как го, а теперь уже и раст с нормальным дизайном синтаксиса и еще без ГЦ и рантайма вообще?
885 2799886
>>799881
ну так пиши на го, какие проблемы )
если у тебя клиентура из тех "низашонипоставимрайнтайм, жаву можна, питон можна, а шарп нееееетьььььь" то можно тебя только пожалеть

можно было бы посоветовать еще триммить, но лучше пожалеть.
886 2799887
>>799881
Шарп вообще никогда не был предназнчен для написания "утилиток". Сборка в один бинарник нужна исключительно для облегчения развёртывания бэкенда.
887 2799897
>>799887
ну это не совсем так. те же дотнет-тулз
просто тут начинается смешное (особенно от жавистов) - "ой ой нужно еще рантайм ставить", как будто лол рантайм жавы не нужно ставить.
888 2799907
>>799897
Сдаётся мне, это не джависты, а бывшие крестоёбы.
889 2799918
>>799424
1. Xunit не при делах
2. Ты можешь вычитывать il байткод сборки и искать там использование того что тебя интересует
890 2799933
>>799881
Пиздишь косой. Там много настроек деплоя в том числе и прям вот одним файлом

Сорт оф пруф
<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>
891 2799942
>>799933
ну технически когда софтина распакоываеся в темп и оттуда запускается - хрень
также тримминг та еще "радость".
892 2799955
>>799942
В принципе анпак будет только один раз на версию происходить. Синглфайл же для удобства доставки нужен как правило так что под пивко сойдёт
893 2799973
>>799955
Т.е. можно обойтись install_wizard.msi
894 2799990
>>799973
Под линь тоже предлагаешь собирать пакет под каждый менеджер?
Тебя извратила винда. Окстись. Инсталлеры для портэйбл софта это зло
895 2800004
>>799990
На линуксе вместо инсталлеров надо собирать винда-стайл снапы.
.png4 Кб, 650x125
896 2800074
>>799881
Зочем ты обманываешь?
897 2800089
>>800074
ммм, а что это приложение делает кроме НИЧЕГО?
и для НИЧЕГО ей конечно же НИЧЕГО и не нужно того, что может дуть файл.
898 2800093
>>800074
Эх, вот бы pdb упаковать в exe.
899 2800097
>>800093
DebugType => embedded
900 2800099
>>800089
Как бы прикол в том что он собирал сингл без рантайма а не только и не сколько потому что проект пустой
901 2800106
>>800089
Конкретно это - да, ничего особого не делает.
На работе - у меня выводок примерно из 50 микросервисов. Самый дутый(сервис авторизации, с кучей интеграция, OAuth и прочими входами ключем с флешки) - ~28МБ и в нем примено 90к строr кода. Я не понимаю, что там за утилитка такая, что 150МБ тянет за собой.
>>800099
>>800099
Публиковал этим
dotnet publish -c Release -a x86 --os win --self-contained

Рантайм, если верить документации - лежит тама.
902 2800125
кто скажет почему LINQ вида

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

выдает результат string?[]. С чего вдруг массив результат стал сам нуллабле?
image.png14 Кб, 256x110
903 2800194
>>800125
За такие тупые финты тебя компилер ещё и унижать CS8600 должен
904 2800199
>>800194
этот финт для примера. в реальном коде в Select что-то возвращающее нулабле
905 2800201
>>800199
Тебе не через каст нужно снимать наллабл у референс типов а через !
906 2800206
Хм.
Хм.

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

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

В общем. Как нормальные люди засеивают базу, когда 50+ таблиц и есть штук 5 таблиц с довольно сложными сущностями?
907 2800207
>>800201
блин опечатался
результат string[]?

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

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

почему?
как и когда результат этого LINQ даже в теории может быть null?
908 2800215
>>800125
Что ты хочешь получить вообще в elems? Мне кажется, что есть способы сделать это правильнее, но надо понять зачем тебе это вообще надо
909 2800221
>>800215
способов миллион, но почему LINQ неправильно выводит тип

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

в результате должен быть список не-нуллов, да пофиг даже если список нуллаблов. но тут у нас сам список нуллабле, что ШТА????
910 2800234
>>800215
я решил через OfType<> который собственно фильтрует нуллы, но все равно непонятно что за херь показывает студия в подсказке
911 2800252
>>800234
Так объясни какая твоя цель. Что такое 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.
изображение.png7 Кб, 435x97
912 2800269
>>800252
да неважно что такое матчес. просто список чего то, все равно потом в нулл превращается

видишь пик? видишь 2 знака вопроса. Почему их 2? потому что студия написана рукожопами.
913 2800327
>>798496
Что-то тебя даже тут заигнорили. Знакомый вкатился недавно. Откликался долго, вкатился на, кажется, 65к. Он уже думал опыт накрутить, но не пришлось
Парень действительно толковый. Он заграницей, откликался на удаленные вакансии в России.
914 2800328
>>800206
Хз, мне кажется, проще прямо в миграции захардкодить сущности, которые ты хочешь посеять
Но я особо этим не занимался, у меня простые случаи. Зато не надо лезть в файлики, смотреть, что же там такое.
915 2800341
>>799933
Лол, наркомания, а письмо билу не надо еще написать, раз такие портянки приходиться писать?
В общем, опять мягкие обвели меня вокруг пальца, как дешевку.
Пускай свое интерпретируемое чудо сами жрут.
916 2800348
>>800341
Полностью согласен. Без тебя всем будет лучше
917 2800349
>>800341
иди в го, иди в раст
там портянки будешь в коде писать.
никаких проблем
918 2800350
>>800206

>есть штук 5 таблиц с довольно сложными сущностями?


Сидируй прямо из excel-я. Сделай xlsx файлик (или еще какой открытого формата), распиши там все данные в связанных таблицах
и дергай данные при сборке контекста прямо оттуда.
919 2800353
>>800328

>Хз, мне кажется, проще прямо в миграции захардкодить сущности, которые ты хочешь посеять


Хуевая придумка. Гораздо проще в табличке вроде csv посмотреть, чем лопатить кучу миграции где все будет выглядеть как жопа.
920 2800358
>>800349
В го может да, а в расте почему портянки?
Всегда думал что больше бойлерплейт приходится на полу-пустые классы в ООП.
921 2800363
>>798496

>В своём резюме вкратце описал основные инструменты в виде наброса ключевых слов, с которыми приходилось работать (аспы, мвс и рестапи, постгрес, немного тайпскрипт и ангулар),


Ко всему этому нужно описание опыта работы. Где работал или в каких проектах участвовал, какой срок, в какой роли, какие задачи выполнял, какие технологии/инструменты использовал. И так для каждого проекта/места работы.
>>798496

>чутка описал чё вообще хочу (а-ля "интересна сфера бэкенд-разработки, хочу развиваться как специалист эмням пук"),


Всем похуй чего ты хочешь.
>>798496

>ну и ссылка на гит с парой своих серверных проектов.


Чтобы кто-то заглянул в твой гитхаб, резюме должно сначала пройти первичный фильтр в виде HR. А потом еще заинтересовать того кто будет проводить собес, тогда он может быть и заглянет туда. Это если он твое резюме не перед самым собесом получит и вообще успеет его хотя бы просто проглядеть.
image.png5 Кб, 469x249
922 2800544
>>800269
A теперь смотри прикол.
923 2800547
string?[] - это сам массив нуллабл, или он из нуллабл строк?
924 2800551
Ну всё, теперь я знаю о string?[]?
925 2800575
>>800358

>а в расте почему портянки?


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

>>800544
а я и говорю - разрабы студии РУКОЖОПЫ. как и разрабы шарпа.
926 2800593
>>800575
Сахар нужен, чтобы скрыть бойлерплейт.
Бойлерплейт в расте скрывается через код ген макросов.
Скажем одной строчкой можно превратить, скажем main в асинхронную main (и все это компильтайм), в других языках приходится городить новый синтаксис.

Сахар это сложность, вот добавили тебе первичный конструктор, но чтобы эта шляпа работала, тонну ограничений внесли. Так что нашел чем гордиться.
927 2800609
>>800575
студия тут не причём
так показываются ссылочные типы-не дженерики
ты можешь написать string? str = ""; и тебе точно так же подсветит что он nullable, хотя очевидно что в данный момент нет, но этой переменной ты потом можешь присвоить null, а к string без ! уже нет
928 2800633
>>800593
это все бла бла. попробуй портировать софт и сравнишь.
929 2800634
>>800206
sql скрипты которые генерят/либо в них прописан xml из которого заполняются таблицы
image.png673 Кб, 712x818
930 2800741
Есть ли смысл в новом, изготовленном с нуля приложении, использовать WPF, если Windows Forms хорошо справляется с задачей в целом меня устраивает?
931 2800747
С SignalR в Core есть кто работал?
Как в нем через хаб обернутый в IHubContext<MyHub> вещать не всем подряд а конкретному соединению/пользователю?
932 2800802
>>800747

> конкретному соединению/пользователю


Никак. Я для этого оч оч сложный код писал, который внутри себя распределял коннекты и строил сложые дикшинари
933 2800931
>>800609
понял.
студия считает любую переменную нуллабле ведь туда можно присвоить нулл
А val в шарпе нет

Привык я, что в котлине сразу все нормально сделали и var/val и нулабилити (в том числе lateinit - где он там в шарпе? чем закончилось? просто ! ну ну)
934 2800939
>>800741
Если тебя не смущает, что аналоги формсов потяжее в плане производительности, то всегда есть смысл использовать что то другое вместо формсов, если твое приложение не пара кнопок.

Впрочем даже если так то зачем вообще помнить формсы
935 2800949
>>800939
А чего их помнить-то, они ж простые как палка. Это зумерские WTF надо учить по полгода.
936 2800971
>>800949

> зумерские WTF


Чувак, ты хоть видел сколько лет WTF? Я бы понял, если бы ты сказал "зумерское MaUI", но зумерское WTF это lil
937 2800976
>>800949
ну это если писать говнокод. я когда на формсах писал, то использовал и их убогие биндинг и MVP юзал
щас там еще какие то биндинги аля MVVM подвезли, но это уже пусть любители простоты разбираются.
А мне и в WPF хорошо.

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

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

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

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

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

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

Но. Я не то чтобы ругаю ВПФ. ВПФ, особенно если в команде больше 1 человека - позволяет упростить жизнь, т.к. уже сказал - он заставляет более-менее разделять ответственность, в результате - один чел может заниматься чисто ДИЗАЙНОМ, второй логикой и всем этим вот.
939 2801135
>>800747
Каждому соединению создаешь группу и вещаешь в эту группу.
Это наиболее простое решение и именно так майки сами в своих примерах по работе с SignalR показывают что надо делать.
940 2801137
>>801130

> У ВПФ проблемы со шрифтами.


Это какие?
941 2801146
>>801137
Они там размытые.
942 2801174
Спа
Кто перекатывался из других языков, насколько тяжело дался процесс? Насколько просели по ЗП в сумме и по времени?
943 2801178
>>800741
Пятый пункт - пиздежь...
944 2801181
>>800747
await HubContext.Clients.Client(client.Id).SendAsync("MethodName", arg1);
945 2801198
>>801174
Перекатывался из плюсов.
Заняло буквально 2 вечера чтобы разобраться с дотнетом, 2 собеса чтобы получить первый оффер.
ЗП на старте - просела на 40% примерно. Но через полгода - уже нагнал.
946 2801356
>>801146
Да. но это лечится.
На авалонии не лечится

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

Он дает возможность отделить логику вида от самого вида. Ну и не заниматься ручным рисованием
И всё
947 2801483
>>800633
Портировать софт откуда? Ты о чем вообще? Обострение шизы?
948 2801508
>>801483
С другого языка. Сложно сравнивать разное, а вот порт отлично показывает как одно и то же делается в разных языках.

А без этого все сравнения бла бла ни о чем. Сишник тебе скажет что ему си норм, пхпшник скажет то же самое. Каждый кулик...
949 2801512
>>801356

>Ну и не заниматься ручным рисованием


А если очень надо, то можно? Давненько было, но помню сходу у меня не вышло порисовать и я доделал лабу на формах
950 2801525
>>801512
Я про кастомный вид контролов. Я не про треугольные кнопки, но иногда нужно что-то свое.
952 2801555
>>801548
Хорошо что никто тут не пишет тесты
953 2801617
>>801548
Выглядит что чел в попытках потешить чсв просто всё заруинил а теперь пытается судорожно всех убедить что итс прэнк бро, сорсес ис эвэйлабл он гитхубе энд айм схаре онли хэш оф юр емейле
954 2801619
>>801617
Хотя я ошибся. Он просто хочет денег и не хочет что бы кто то мог убрать эту хуету. Прям как в f2p играх
955 2801620
>>801174
зависит от твоего опыта. Я в течение 1-2 лет перекатился, и всё это время работал.
956 2801623
>>801548
надеюсь пизда ему, а то соя может и пощадить
957 2801665
>>801623
Предлагаешь колени ему сломать?
958 2801670
>>801623
А ему и так пизда.
Большинство и так уже спрыгнуло с его библиотеки.
Если кто-то и донатил, то теперь точно не будет.
Ну и жирная метка "но хаир" в резюме. "Вы автор библиотеки moq? А так это вы тот мудак из-за которого мы потратили миллионы баксов из-за того, что пришлось по быстрому выпиливать ваше говно из наших проектов""
959 2801671
>>801665
Заставит писать на джаве.
960 2801704
Смотрите.
Есть интерфейса:

IDeviceReader

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

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

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

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

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

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

Я в тупике. А разраб который имплементировал это все дело - в упор не хочет нормально сделать, придумывая миллион хуйни и отшучиваясь, а уже месяц сделать не может, ну а забрать и сделать нормально - мне не разрешают, говорят что его задача - пусть он и делает, а у тебя есть свои.
961 2801713
>>801704

> Попытки извращаться с Task.WhenAny


почему? как так? это невозможно
962 2801764
>>801704

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


Значит проблема не техническая, а организационная. Создаешь подзадачу на этого чела по исправлению косяка, помечаешь её как блокер своей и занимаешься чем-нибудь другим.
963 2801780
>>801704
ничего ты не сделаешь. Если ты не можешь по таймауту закрыть сокет или что то такое, что сразу прекратит работу этого зависшего кода и выдаст исключение, то труба.
964 2801807
>>740238 (OP)
Кто-нибуть юзает шифрование данных в бд в своем проекте?
Сейчас использую шифрование на уровне приложения, то есть любая операция с данными с базы/в базу у меня идет encrypt/decrypt.
Вопрос можно ли это сделать как-то нативно на уровне самого mssql и настроить ef?
Какие подводные?
Сейчас читаю про TDE, но до ef'а еще не дошел.
965 2801850
>>801807
Можно, но не нужно.
Если тебе понадобится потом БД сменить (а MSSQL тебе точно придется сменить) или поменять метод шифрования, то ты огребешь охуенных проблем и сам себя проклянешь.
966 2801853
Я перефразирую вопрос:
Что по вашему лучше использовать: шифрование на уровне базы или приложения?
На уровне приложения как по мне более универсальный способ, т.к. можно без задней мысли подменять разные субд.
И еще - какой вариант лучше по производительности или особой разницы нету?
967 2801856
>>801850
Хорошо, спасибо, я в принципе так и подумал, буду просто хуярить на уровне маппера.
А почему мне нужно будет сменить mssql?
968 2801880
>>801856

>Хорошо, спасибо, я в принципе так и подумал, буду просто хуярить на уровне маппера.


>А почему мне нужно будет сменить mssql?


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

>>801853

>Что по вашему лучше использовать: шифрование на уровне базы или приложения?


На уровне приложения, т.к. во первых шифрование - это по сути перемалывание чисел и не является нормальной задачей для БД. Во вторых тогда между приложением и БД данные у тебя будут ходить в открытом виде. И какой тогда толк от твоего шифрования.
humand-speaks-to-a-monkey.gif7,1 Мб, 374x211
969 2801884
>>801880
Вообще у меня пока бд крутится на одном хосте с приложением, но вообще ты прав анон, спасибо.
970 2801889
>>801880

> Во вторых тогда между приложением и БД данные у тебя будут ходить в открытом виде.


Если речь о канале то постгрес и мссукель могут в тлс
971 2802314
>>801704
Какой ответ ты ждёшь с максимально абстрактным IДывайсРыдэр.ВычитатьХуету? У тебя должен быть ивент на отключение девайса, в нём ты можешь закенселить токен, например.

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

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

дальше в методе используешь cts.Token, если всё синхронное, то придется проверять IsCancellationRequested или на каждый пук вызывать cts.Token.ThrowIfCancellationRequested
972 2802444
>>802314
нормальный у него вопрос. А вот твой ответ капитанский - юзай cancellationToken, люк

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

> есть какой-то механизм отмены


Есть какой-то другой механизм отмены.

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

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

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

WTF????????

НАХУЯ? нахуя тогда вообще нужен такой компонент, я не понимаю сука.
977 2802594
Вот так тоже не работает, я сука не ПОНИМАЮ как они предполагали что мы будем использовать этот ебучий компонент, с сабмит формами как в 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();
}
978 2802607
>>801704
У тебя есть возможность запустить этот таск в отдельном Application? Не в смысле в отдельном инстансе программы, а в Application.Run?
979 2802608
>>801807
mssql? Windows Server? Vera Crypt https://www.veracrypt.fr/en/Downloads.html
image.png22 Кб, 945x160
980 2802668
Это какой-то рофл?
981 2802674
>>802668
CurrentCulture / CurrentUICulture
982 2802677
>>802674
Оу, спасибо, я немного слепой.
983 2802819
>>801704
почему ты не можешь вызвать его говнометод в отдельном скедулере и там абортнуть тред?
984 2803321
>>802607
Разве это не чисто виндовое АПИ?

Вся та суть того что сейчас делаем - это перенос старого работавшего приложения на фреймворке с WPF на .NET6 и дробление на наносервисы.
985 2803339
>>802819
переходи уже на дотнет 5+ что ли
986 2803474
>>801130
Не путай WPF и Авалонию.
Это у авлонии проблемы сол шрифтами, у майкросфтовского ВПФ все норм и есть вагон и тележка решений (причем я считаю это уступками для идиотов).
987 2803790
>>803474
каких идиотов. что для тебя есть идиотизм

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

в впф лечится. и в электроне лечится - просто всем похер.
988 2804365
>>803339

>У НАС МОДНЯВАЯ АСИНХРОНЩИНА НО УБЛЮДОК ИГНОРИТ ТОКЕН


>ну ок вернись с небес на землю запусти его каловый метод в отдельном треде и абортни его


>ты че переходи на датнет 5


вот к чему ты это высрал? у нас в тиме уже семёрка и будет восьмой сразу по релизу, какое отношение это имеет к обсуждаемому сабжу и тому как иметь дело с многопотоком - я хуй знает, но тебе должно быть стыдно за свой уровень "компетентности"
989 2804369
>>804365

>вот к чему ты это высрал? у нас в тиме уже семёрка и будет восьмой сразу по релизу


>свой уровень "компетентности"


О, мистер компетентный сеньер
О, великий гуру многопоточного программирования
Научите меня, неуча, как абортировать треды в дотнет 5+
И я посыплю голову пеплом и буду молиться на величайшего из величайших.
990 2804371
>>804365
Читать скрытое всем, кроме величайшего

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

private static extern bool TerminateThread(

И вроде бы работало, вот только Thread подвисает в неизвестном состоянии. А еще это только винда значит.
991 2804530
>>804365
Сказочный долбоеб...
992 2804638
>>803790

>что для тебя есть идиотизм


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

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

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

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

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

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

Идея состоит в том, чтобы копировать это xaml документ и править цвета под конкретное приложение. А как это делать с нюгетами? Может есть возможность прикреплять сопутствующий файл?
994 2804663
>>804661
Отпиздил бы тебя за такой нейминг.

> А как это делать с нюгетами? Может есть возможность прикреплять сопутствующий файл?


Просто переопределяешь ключи, они будут скрывать ключи из нюгет пакета.
995 2804664
>>804638

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


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

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

И еще можно использовать 4й хак - в зависимости от DPI выбирать рендер шрифтов тем самым сидя на 2х стульях (без пик и других торчащих предметов)
996 2804667
>>804661
Есть вариант при установке нугет пакета в дерево твоего проекта копировался файл. Как реализовано не помню но возможность есть
997 2804786
>>804663

>Отпиздил бы тебя за такой нейминг.


Или ты про .Border6 ... 8 и т.д.?

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

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

Пока что у меня так: .Border2 .Border4 .Border6 с резервом под оттенки.
Не знаю пока как лучше поступить.
998 2804790
>>804786
Называть нужно так, чтобы было понятно, где и для чего используется тот или иной ресурс, например - EditPageMagicButtonTooltipHeaderTextBlockSolidColorBrush
Либо чтобы сделать названия короче можно разделить словари ресурсов по страницам.
999 2804791
>>804790
Либо, если это ресурс по умолчанию, то так и пишешь EditPageDefaultTextBlockSolidColorBrush
1000 2804805
>>804790

>Называть нужно так, чтобы было понятно, где и для чего используется тот или иной ресурс


Так он получается динамическим по своему предназначению, но статическим по ключу.

>Либо чтобы сделать названия короче можно разделить словари ресурсов по страницам.


Это так и сделано. У меня отдельный словарь потом все это смешивает.
1001 2804837
студия достала ругаться на async void
я знаю про их опасность и поэтому содержимое этого метода в try..catch (которое и то не всегда нужно)

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

БЕСИТ
1002 2804890
>>804837
Вот бы господь покарал каждого уебана, который в своем коде async void без трай кеча делает. Эх, мечты-мечты.
1003 2804898
>>804837
Возьми да отключи ненужные предупреждения в проекте/файле
1004 2804989
>>804890
Не везде он нужен.
1005 2805005
када перекат???
1006 2805018
>>805005
что такое перекат
1007 2805070
>>805005
Перекати.
1008 2805077
>>804664

>только особо придирчивые знатоки узреют проблему. А таких 3.5 человека на галактику


Это как аудиофилы, которым нужны провода из волос девственницы, чтобы убирать косяки звука, которые 98% населения никогда не услышит.
1009 2805352
>>801704

> забрать и сделать нормально - мне не разрешают, говорят что его задача - пусть он и делает, а у тебя есть свои



Правильно говорят. Тебе за это не плятят. Если начальство это не ебёт, и начальство не ебёт тебя - не твоя проблема.
1010 2805354
>>805352
В итоге у него просто исчерпается пул или будет миллион спящих потоков и приложение начнет просто тормозить

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

Так что его прямая проблема.
1011 2805361
>>805354
Терпильная тактика
1012 2806336
Почему статические виртуальные методы появились только в net 7?
1013 2806363
>>806336
а почему IReadOnlyList появились когда появились, и как костыль?
А почему фрозен коллекции только сейчас?
А почему нуллабилити появился когда появился и снова как костыль?
А почему FolderSelect диалог появился в WPF только вот щас (и то не знаю что в итоге), когда WPF уже мертвым нарекли сами мс?
А почему годами висит предложение "ну сделайте вы возможность задать ConfigureAwait(false) на уровне сборки"?
1014 2806378
>>806363

> а почему IReadOnlyList появились когда появились, и как костыль?


При этом его не реализует IList...
1015 2806383
>>806378
Так он же не ридонли.
1016 2806390
>>806383
он имеет весь контракт IReadOnlyList , а не реализует он просто потому что про эту очевидную деталь вспомнили не на этапе проектирования языка, а аж потом и не стали ломать бинарную совместимость и получилась хрень.
1017 2806930
Стоит ли идти тим лидом (за хорошие деньги)? Не потеряю ли я хард скиллы, если буду работать тим лидом на проекте, в основе которого легаси (фронт ну точно легаси)?
1018 2807429
>>806930
На завод иди, кнопки красить. Хард скиллы до небес взлетят.
1019 2807581
>>806930
Сходи, потусуйся пол года и если что уйди в другое место или прямо в это же на другую должность.
Лично я ебал в рот управлять людьми. Как бы грустно не звучало но я хороший исполнитель и паршивый руководитель
1020 2807588
Вот я часто слышу, что наследование - бяка.
Но допустим. У меня есть класс: СерверУстройств, СерверПользователей.
Все отличие в них - это парсер которым парсятся байтики и эндпоинты к которым надо отправить сообщение.
Так почему мне бы не сделать БазированныйСервер. Который будет в себе содержать всю логику которая общая. И при этом, вместо того чтобы возиться с женериками и конфигурированием DI - не описать в СервереУстройств и СервереПользователей - специфичные парсеры и эндпоинты.
Что будет в этом плохого?
1021 2807612
>>807588
Почему бы не сделать композицию из функций, где отличаться будет только функция парсера?

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

DI – удобная штука. Можно сделать экстеншены и конфигурировать будет удобно
1022 2807615
>>807588
А почему не сделать один сервер и передать в два инстанса разные парсеры?
1023 2807623
>>807615
Потому что тогда начинается;

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

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

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

>>807612

>DI – удобная штука. Можно сделать экстеншены и конфигурировать будет удобно


Удобная. Но в ряде случаев - не нужная.
1024 2807629
>>807623

>Потому что тогда начинается;


дизайн ради дизайна. ну значит страдай
1025 2807883
Rider или Visual Studio?
1026 2807902
1027 2807909
>>807902
нет чел, я просто хочу с кайфом прогать, а не пердолиться
1028 2807920
>>807909
тогда тебе правильно подсказали - vim
с райдер или студией ты будешь регулярно "да епрст че оно все красное, че оно не билдится, что за msbuild ошибка которая ни на что не влияет но постоянно висит в уведомлениях студии, да блин че ты на точках останова виснешь и появляется мессаджбок что оно что то там резолвит. чего оно тормозит то так. чего оно не обновляется без впн, что за оом при билде у меня 100500 памяти, а оно ж вроде 64битное стало и даже если оом почему его нет при повторном билде, почему дебаг такой ущербный (ну да в вим полная жопа с ним, но то ж вим, а это студия - как бы главная IDE), что за тупой навигатор по коду в 23 году блин и т.д."

с vim у тебя будет "да блин как неудобно", но тут же "так это vim, а чего я ждал" и сразу спокойствие от осознания.
Со студиями же жопа будет гореть ибо такого осознания не будет. Нет оправдания ущербности студиям и райдерам.
1029 2807957
>>807909
Ну тогда х.з.
Меня студия в принципе вполне устраивает. Можно на неё еще суперчарджер сверху накатить и вообще норм будет.
1030 2808042
А ну как нужно пояснение.

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

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

Пиздец, если это правда и так вы пишите стек и другие, то я в ахуе нужно было на шарп вкатываться, а не в эту ебанную головоломку
1031 2808063
>>808042
У меня другой вопрос. То как ты мысли выражаешь - это твоя личная особенность или тебя так плюсы поломали?
Нихуя же не понятно.
1032 2808160
>>808063
Да нормально написал, но скорее плюсы поломали меня.
1033 2808236
Сап. Мужики, есть способ крякнуть Aspose.Words.NET дллку? А то цена за лицуху кусается, но именно эта тема может намана помочь на работе
1034 2808252
Никому не нужен впф разработчик с годом опыта?
1035 2808263
>>808236
Дико обфусцирована или не вскрывал?
Модификация дотнетовских дллок обычно буквально в два клика делается
1036 2808276
>>808263
Вроде как обфусцирована, из того что я вижу через dotPeek, в классе Licence у ребят куча полей просто не отображается (типа названия) нет.
Вот я и хочу понять каким образом там можно эту блядскую проверку на лицензию убрать, потому что в стоке она при работе с файлом накладывает туда вотермарку блэд
1037 2808287
>>808263
Если есть инструкция как лицуху в два клика крякнуть, буду благодарен если дашь))
1038 2808417
>>808287
за 1199 долларов есть надежный кряк
1039 2808587
>>808042
Стек на шарпе создается:
var stack = new Stack<int>();

Все.

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

Про память. Тебе никто не мешает прикрутить к плюсам свой умный алокатор или пользоваться смарт поинтерами.
1040 2808614
Сишарп все? Активность постинга в этом треде уровня дохлого голанга. Даже на перекат всем похуй.
Все, сдох.
1041 2808617
>>808614
Вот и уёбывай в свой голанг.
1042 2808733
>>808587

>var stack = new Stack<int>();


Stack<int> stack = new();
1692222656552.jpg242 Кб, 818x1474
1043 2808784
1044 2808791
>>808733
В ходе долгих размышлений на этот счет - я пришел к выводу, что в методе - лучше использовать как раз

> var stack = new Stack<int>();



Почему?

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

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

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

var some = new SupperDupperClass<SupperDupperType1, SupperDupperType2, SupperDupperType3>();
1045 2808793
>>808617
Я хочу разобраться почему постинг здесь хуйня.
1046 2808798
>>808793
Тебя это ебать не должно.
1047 2808804
>>808793
Потому что уже 500+ постов как тред в бамплимите, умник.
А у меня нет картинки с аниметянками, чтобы перекатить уехал в отпуск с новтбуком, на ноутбуке только браузер, докер и студия есть.
Ну а без аниметянок я перекатывать не хочу.
1048 2808806
>>808804
Возьми из шапки этого треда.
1049 2809363
>>808614
Ну у меня вопросов пока не возникало. Что писать? От шарпа я не ушел.

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

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

В общем, эксперимент не удался.
Правда я тупо отправлял джейсон-реквесты, а там есть еще технология gRPC, которую мой моск не осилил, а там стоимость рассчитывается для gRPC и Rest по разному.
1050 2809408
>>809363
выглядит как просто надстройка над платным сервисом. С чего ей быть рентабельной.

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

Ну я сделал в итоге. Вот я молодец. Только кому оно надо?!!
1051 2811266
Как добавить логгирование в библиотеку? Пока думаю над созданием статического класса, у него будет интернал метод для вызова события, и собственно событие, на которое при желании сможет подписаться потребитель либы. Какие подводные?
1052 2811480
>>811266
Зря ты стал на этот путь
1053 2811544
>>811266
Мне обычно глубоко похуй и добавляю в зависимости логгер от майков а там юзер пусть сам решает что, откуда и куда
1054 2811549
>>811266
Если ты выбрал среди всех этих диагностик, трейсорс, евенсорс, логгеры и выбрал таки логгеры, то вот
https://youtu.be/Sq_h5bVWJ0k?t=2006
1055 2811963
>>740238 (OP)
Хотелось бы узнать есть какие то сервисы по проверке чистоты/читабельности того говнокода что ты написал ? Сам только пытаюсь учить шарпы
1056 2812099
>>811963
Итт лучший сервис...
1057 2812244
>>812099
Да. Тут напихают от души
1058 2812365
>>812099

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

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();
}
}

}

}
1058 2812365
>>812099

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

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();
}
}

}

}
1059 2812381
>>812365
Код лучше закинуть на гист, как я с телефона буду тебе смотреть
1061 2812467
>>812429
Гпт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`, который определит направление движения мяча.

В целом, ваш код хорошо организован и легко читаем. Однако рефакторинг в соответствии с вышеуказанными рекомендациями поможет сделать его еще лучше.
1061 2812467
>>812429
Гпт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`, который определит направление движения мяча.

В целом, ваш код хорошо организован и легко читаем. Однако рефакторинг в соответствии с вышеуказанными рекомендациями поможет сделать его еще лучше.
1062 2812470
>>812467

> В целом, ваш код хорошо организован и легко читаем. Однако рефакторинг в соответствии с вышеуказанными рекомендациями поможет сделать его еще лучше.


@

> Ты написал говно но мне не разрешают открыто хуесосить юзеров. Так что внемли тому что выше и не позорься в следующий раз

1063 2812833
>>812467
А че, хорошо стелет...
1064 2813274
>>812833
Настолько, что думаешь, куда расти, чтобы ИИ не заменило через пяток лет. Думаю вкатываться потихоньку в машоб
1065 2813670
>>813274
В умение перекатывать треды. Крайне нужное умение
1066 2813950
>>813670
Кто, я?
1067 2814269
>>813670

> Крайне нужное умение


Где можно ознакомиться со статистикой зарплат?
1068 2814272
кто - то да перекатит
но это уже совсем другая история
1069 2814280
>>740238 (OP)

>>2808819 (OP)
>>2808819 (OP)
>>2808819 (OP)
Кто - то перекатил и не сказал об этом
Ответьте в некст треде на мой вопрос пж
1070 2814301
>>814280
дожили. уже жависты треды шарпистам создают.
Тред утонул или удален.
Это копия, сохраненная 7 сентября 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски