Вопрос скорее по visual studio, чем по шарпу: как заставить отладчик стопаться на точке останова на каждом n-ом проходе цикле, и логировать все значения переменной в студии для удобного просмотра в UI, а не логировать это в текстовый файл. Отлаживаю криптографию (на скрине) но не могу понять как это удобно сделать, жопа горит. Если кто знает из-за чего сама ошибка может быть, буду рад помощи, не могу понять почему массивы вдруг разными становятся, мб дело в Unicode который зашифрован в AES-GCM
>>2649663 У каждой точки останова есть условия, это что-то в виде очень простого макроса. Дальше гугли что надо прописывать. Жалко, что нельзя эти условия как-то сохранять в список.
>>2649663 >и логировать все значения переменной в студии для удобного просмотра в UI Если Serilog, то есть множество либ, типа Sink.File, Sink.Debug, Sink.RichTextBox и т.д. У меня первые два, настроил для них разные уровни. Поэтому в окне интерпретации поверхностная информация, а более подробная в файле.
Смотрите. Фронтенд использует devExtrem'овский датагрид. Ну дык вот. Проблема в чем. Вот в чем: Тащить из базы миллион записей, чтобы их на клиенте отфильтровать, сгруппировать - бредово. В GraphQL - девекстримовский датагрид - не умеет. odata - не подходит, потому что не умеет в группировки(а они - надо). Нужно велосипедить свое решение, чтобы поддерживало на стороне сервера группировки, сортиорвки и все это вот. Ну, собственно - теперь у меня есть вопрос. А КАК? Типа блин, я реально не понимаю, как мне динамически по имени поля - EF'ом отсортировать как надо, сгруппировать и отфильтровать. Типа мне прилетает запрос вида: { public bool RequireTotalCount { get; set; } public bool RequireGroupCount { get; set; } public bool IsCountQuery { get; set; } public bool IsSummaryQuery { get; set; } public int Skip { get; set; } public int Take { get; set; } public SortingInfo[] Sort { get; set; } public GroupingInfo[] Group { get; set; } public IList Filter { get; set; } public SummaryInfo[] TotalSummary { get; set; } public SummaryInfo[] GroupSummary { get; set; } public string[] Select { get; set; } public string[] PreSelect { get; set; } public bool? RemoteSelect { get; set; } public bool? RemoteGrouping { get; set; } public bool? ExpandLinqSumType { get; set; } public string[] PrimaryKey { get; set; } public string DefaultSort { get; set; } public bool? StringToLower { get; set; } public bool? PaginateViaPrimaryKey { get; set; } public bool? SortByPrimaryKey { get; set; } } Я должен отдать типа { data: [{ key: "Group 1", items: [ ... ], count: 3, summary: [30, 20, 40] }, ... ], totalCount: 200, summary: [170, 20, 20, 1020], groupCount: 35 }
И если паггинацию, сортировку, да хрен с ней, даже фильтрацию я как-то сделал с помощью DynamicLinq, то вот как мне группировки эти делать - я с душе не ебу, хоть убей. Объяснить фронтендеру, что нафиг этот датагрид ебаный, тоже не получается, мне говорят что я рукожоп просто(((
>>2650615 >как мне динамически по имени поля - EF'ом отсортировать как надо Я х.з. честно говоря, последний раз такое года два назад делал. Но насколько помню, пилишь пачку спецификаций которые будут собирать тебе нужные предикаты (либо базовых и конкретных, наследуемых от них, либо универсальных, но тогда понадобится резолвер для приведения имен столбцов в БД к именам свойств сущностей). А потом подсовываешь все эти предикаты в нужные места запроса.
У меня есть проект с апи, сейчас нужно сделать телеграм бота, что дёргает это апи и позволяет юзерам юзать функционал приложения через этого бота. До этого я с ботами не сталкивался, реализовал стейт, чтобы бот понимал последовательные запросы. Аутентификацию добавил, т.е пользователь сохраняется в основной базе даже в случае если он до этого не использовал приложение. Все работает, пока храню контекст в словаре (id, context). Получаю нового пользователя - добавляю в словарь, даю базовый стейт, когда он ливает, то убираю из словаря. 1) Теперь думаю, а где лучше стейт (мб даже сам контекст) хранить? В базе или может в json каком-нибудь? По логике не стоит вообще это пихать в основную бд(там где апи и прочие основные проекты), т.к это ж по-сути только к боту относится. Сделать новую бд? Json кажется костылем, но может быть так делают? 2) Также бот умеет в оповещения (Background jobs). Пользователи могут сам создавать джобы, задавать им время, периодичность. Т.е при выполнении задачи бот посылает пользователю сообщение. Где лучше их хранить, в смысле задачи? Могу сделать бд с таблицей вроде (тип задачи, время, периодичность), либо опять же json? Наверное глупые вопросы, но мне пока непонятно, что стоит хранить в json помимо всяких конфигов, а что в бд.
>>2651551 >>2651551 >Теперь думаю, а где лучше стейт (мб даже сам контекст) хранить? В базе или может в json каком-нибудь? По логике не стоит вообще это пихать в основную бд SQLite. Маленькое, быстрое и не требует установки доп звисимостей в систему. БД может либо инмемори, либо в одном файле быть. У меня пимерно такой же проект. Я все что нужно самому боту храню в sqlllite бд.
>>2651551 в жсон конфиги. в бд данные хранить состояние в теории можно в файлах, но зачем - у нас тут не сайтик на пхп
Храня в файлах получаем весь попутный гемор вида - а выбирать как? все в память грузить что ли? - а обновлять частично как? - а если свет рубанут (процесс умрет), а оно файл как раз писало - ручное костылирование транзакций.
нафиг оно нужно. правда нужно не забывать что sqlite лочит всю базу на запись. И если вдруг ты из многих потоков будешь активно пытаться писать вида "открыл коннект - записал - закрыл", то можешь легко получить database is locked
Я не знаю как щас с мс оберткой там они ж пул коннектов прикрутили. Но вот с (какой там самый старый провайдер) я получал database is locked. Оказалось что первый коннект пишет, пришел второй видит занято и ждет. Причем не в очередь становится, а просто через время еще раз пробует. А пока он ждал пришла еще запись. В итоге второй через кучу попыток так и не сможет вклиниться и выдаст ошибку. Пришлось разруливать семафорами, что неудобно
>>2651751 Думал так сделать, спасибо. Уже в принципе сделал. >>2651905 Про локи не думал и пока не сталкивался обычно использовал postgresql/mssql, у меня ещё была идея кэшировать все это, не сильно поможет, но все же. Спасибо за подробный ответ. А как поступают с неизменяемыми строками, тоже лучше в бд? Я сейчас все ответы бота храню в json, потом через DI прокидываю конфиг в класс, что отправляет сообщения, там он в зависимости от языка пользователя берет из файла нужный ответ. С динамическими ответами сложнее, благо у них тоже структура есть, достаточно взять из конфига, подставить значения прилетевшие с бекенда. Я это сделал, чтобы не хранить строки в коде и читал в факе о ботах, что желательно подстраивать ответы под язык пользователя.
Вопрос по теме для диплома, хочу делать на asp .net core и нужна какая-то идея для задания, где .net покажет себя лучше всего. В дипломе всё таки нельзя сказать, что я взял c# потому что мне захотелось на нём, может есть мысли по поводу того что можно реализовать или вообще просто какие-то сферы/кейсы где .net core себя проявляет лучше в сравнении с другими. Спасибо.
>>2652193 >Вопрос по теме для диплома, хочу делать на asp .net core и нужна какая-то идея для задания Как-то по ебанутому у тебя диплом выглядит. Обычно всегда дается одна или несколько тем на выбор, а потом уже к ним ищется инструментарий для выполнения. >>2652193 >какие-то сферы/кейсы где .net core себя проявляет лучше в сравнении с другими Как бы мне ни нравился C#, но по факту - ни в каких. Есть джава, есть go. Шарп с джавой примерно от одного хуя яйца по возможностям и эффективности. Большинство различий - вкусовщина. Плюс джавы - она более распространена, но за шарпом стоят все бабки майкрософта и они нихуево так вкладываются сейчас в его развитие. За go правда все бабки гугла стоят, но там пока еще сырая архитектура, плюс это гугл, вариант того, что они завтра скажут "мы наигрались, закрываем проект" немаловероятна. Ну может еще в инди-геймдеве шарп кое-где роляет (но я так понимаю диплом ты на этом не построишь).
Сделай какой-нибудь сервис по консолидации грузоперевозок. В нынешних реалиях очень полезно (такие проекты есть и разрабатываются сейчас и за них платят неплохие деньги). А выбор шарпа мотивируй скоростью и удобством разработки, легкостью разворачивания готового сервиса. Если сделашь на .net7 (или даже на превьюшке 8-го), то можешь даже скоростью козырнуть.
>>2652126 >А как поступают с неизменяемыми строками, тоже лучше в бд? Я бы такой функционал, как ты описал хранил бы в БД наверное. Просто во время работы дергал бы из нее набор для нужного языка и использовал. Плюс опять же, в случае использования sqlite, ты можешь целый пучок этих баз создать под разную функциональность. Один под хранение стейтов, один под работу с сообщениями на разных языках. Тогда и локов проще избежать будет и ебли с файлами не будет. Просто разные контексты настроишь и все. А файлы бд в случае sqlite вообще мизер будут занимать на диске.
>>2652276 >Как-то по ебанутому у тебя диплом выглядит. Обычно всегда дается одна или несколько тем на выбор, а потом уже к ним ищется инструментарий для выполнения.
Это же чуть ли не клише "студенческая работа", когда человек подбирает задачу под инструмент, а не инструмент под задачу. Такие работы оторваны от жизни, а если хочется впихнуть невпихуемое, то маскируется под "исследование темы", типа "в этой работе я попытался исследовать возможность программирования микроконтроллеров на C#"
если методу передать массив из 1000 строк, то передастся ссылка или значение? стоит ли так делать как повлияет на ситуацию, если аргумент просит IEnumerable?
>>2652300 >если методу передать массив из 1000 строк, то передастся ссылка или значение? Это ж насколько у тебя хлебушек в голове, если ты задаешь настолько ебанутые вопросы? Ты не думаешь, что тебе не стоит влезать в кодинг, если ты даже базу о ссылочных и значимых типах не можешь освоить?
>>2652276 >Большинство различий - вкусовщина ну да ну да - жрать черствый заплесневелый хлеб или сладкую мягкую булочку...ну да, просто разные вкусы ))
>>2652193 Автоматизация предприятий. Особенно что связано с промышленностью и всяким железом. Написать микроскаду на шарпе под конкретное предприятие - это просто охуеть как приятно, удобно и просто.
Если у тебя специальность прикладная - то я бы что-то в духе: использование компьютерного зрения, для автоматизации работы предприятий такой-то промышленности. Ну, мерил бы там размер крышечек на конвеере и все такое.
Если не прикладная, то можно в криптуху удариться со всякими блокчейнами и прочим.
Если специальность сугубо научная - делай очередную колоночную субд с оптимизацией хранания деревьев в ней.
Да. Из прикладных - еще можно намутить систему управления умным домом, хостить систему на какой-нибудь малинке. Тоже прикольно.
Обосновать шарп всегда можно тем что все есть и требует минимальное число телодвижений, по сравнению с остальным добром, за то и любим.
Почему буквально все коллеги на работе - против того чтобы вот такие атрибуты добавить и сделать свой класс расширения который будет из сборки сервисы доставать? Вот буквально. Джуны - нам норм каждый раз в Startup/Program добавлять. Мидлы - нам норм. Сеньеры - та хуй знает, а вдруг другие на поймут, найхуй свой метод расширения тащить в проект...
Я как еблан, только в своих частях кода - вот такое делаю. Просто заебывает именно то, что это у себя-то я делаю, но вынести в отдельный проектик в духе: Project.Common - не разрешают(((
>>2652824 >нам норм каждый раз в Startup/Program добавлять да. не джун. потому что так все в одном месте и это место ясно где а не размазано по проекту
>>2652880 Я не знаю. Может быть я один такой болезненный и если 6 часов ебусь с какой-то сложной логикой - могу забыть зарегистрировать. ХЗ. Меня - напрягает. Особенно, когда сервис который ты писал - где-то в дебрях логики, и чтобы наткнуться на то что ты забыл зарегать что-то, приходится проделать кучу манипуляций, пока не поймаешь эксепшн. А тесты-то не падают, ведь тестировать что ты все зарегал - муторно, потестировал что сервис работает как надо - залил, потом - прилетает тебе пиздюлей, что ты еблан такой. Плюс, файлик startup - становится пиздецки огромным у меня. 100 сервисов сделать мне - это как пить дать, я люблю на любой чих - делать отдельный сервис.
>>2652891 >Может быть я один такой болезненный Я тоже подумывал над таким вариантом. Но меня останавливает то, что при рефакторинге, можно задолбаться отыскивая какие сервисы у тебя подключены, а какие нет. Плюс если захочешь изменить лайфтайм какай-либо цепочки, то вместо того чтобы в одном месте все изменить, придется по всем сервисам пройтись и в каждом атрибут поменять.
А как парсить сайты? В частности авито. Ну т.е. понятно что нужно будет разбирать аштээмэльку, но может есть подводные? Типа регулярно менять айпи или соблюдать определенные тайминги дабы не спалили что это машинные запросы и не забанили?
>>2652954 Шарпопетухи занимаются ещё как Недавно нюхал рыночек вакансий, в итоге решил пообщаться с букмекерами/онлайн казиношниками.
Искали мидла/сеньора для поддержки высоконагруженных сервисов с основным требованием "Уметь быстро и качественно парсить сайты", попросили написать пагинацию коллекции на LINQ без Take/Skip и перебора со счётчиком
>>2652957 >попросили написать пагинацию коллекции на LINQ без Take/Skip и перебора со счётчиком Кек. С одной стороны зввдачка на ехуй делать. С другой стороны мощнейший признак того, ясто собеседующий ебобо.
>>2652891 Ну так дроби Смотри же как тот же асп.нет делает Ты подключаешь либы и делаешь services.AddFeature()
Ну а кто тебе мешает так же делать Сделать стат класс где методами расширениями разбить эти 100 регистрации на логические секции А если классы в других модулях кишки котрого не торчат наружу, то унести регистрацию этих классов туда.
Не каждый проект в солюшене торчит кишками наружу, а вполне себе отделяется интрфейсами и ничем не отличаются от либы с нюгета
>>2653105 У меня в качестве халтурной подработки три нормальных микросервиса на очереди стоят. При том что я не фрилансер даже и еще думаю соглашаться или нет. Нормальной работы кругом - жопой жуй. Нахрена еще с парашей вроде парсинга сайтов заниматься?
>>2653135 Ну так он их и получает, либо через свое API, либо по шине. Ну и опять же микросервисы разные бывают. Не всем в интернете нужно сидеть и мониторить цены на говносайтах.
Есть вопрос по Entity Framework, нужно ли после создания контекста утилизировать экземпляры с помощью Dispose или using? Такое ощущение, что тут нет единого мнения. Одни говорят, это нужно делать обязательно, другие, что контекст сам управляет своим состоянием. Я запутался крч, хз как правильно. Вот, например, у меня есть wpf приложение, где UserControlы использую как страницы, загружая в бордер. В каждом UserControlе создаю свой контекст ApplicationContext db = new ApplicationContext();, но нигде не закрываю. и если можно и не закрывать, то я так понимаю нужно использовать try catch на каждое обращение к базе?
>>2653215 От провайдера зависит, когда ты руками или через юзинг диспоузишь контекст, то он может быть реально не закрыт, а помещен в пул. Также и с открытием. Тебе не нужно держать контекст долго, т.к в таком случае данные там могут быть несвежие. Юзинг в таком случае твой выбор. Ещё подумай о том, почему вообще контролы знают о контексте? Мб оно им не надо и стоит сделать абстракцию над AppDbContext, например репозиторий какой-нибудь?
>>2654074 В структуре только ссылка хранится. Ссылки хранятся на стеке или в регистрах, в хипе если подразумевается долгое хранение. Другие дело, что value types совсем необязательно будут на стеке. Можешь чекнуть статью the truth about value types или как-то так. То, где будет храниться value type сильно зависит от того как ты его используешь. Но даже так за тебя это jit делает, какую он там стратегию выберет только ему известно
Аноны, нужна помощь мастеров над логикой и данными.
Мне нужно в JSON массиве хранить информацию о всех игровых предметах на сервере. Это ID предмета, тип предмета и тому подобное (скрин 1). Там же мне нужно хранить информацию о стоимости. И отдельными списками хранить офферы для каждого игрока, тоже в JSON массиве.
Более 95% предметов доступны к покупке только через офферы. То есть их нельзя купить напрямую, только если сервер предложил их тебе через оффер. Допустим, набор с 500 монетами можно купить напрямую и сколько угодно раз, а определённое Оружие можно купить только по офферу и только один раз. Я для доступных предметов решил добавить поле IsPublic, чтобы проверять его на сервере может ли игрок купить свободно этот предмет. Но чёт мне не нравится. Может это нужно перенести в GameItemPrice.
Получить предмет можно 3 способами: - Бесплатно - За реальные деньги (для этого нужно хранить ProductID товара из реального магазина) - За виртуальные внутриигровые деньги. У таких денег есть код валюты (Gems или Coins) и может быть скидка. У одного предмета может быть стоимость в разных виртуальных валютах, со скидкой и без
Вопрос: как всё это хранить у игрового предмета и что хранить в офферах?
Набросал первый вариант на 1 скрине. Вроде удобно получается и даже близко к реляционной базе данных. Но возможно для моего случая это избыточно. Ещё набросал второй вариант чуть проще. Возможно он логичнее с той точки зрения, что Free задаётся в самом оффере (если ты выдаёшь предмет бесплатно, как подарок, то это только оффер как ни крути)
>>2654925 Желаю теб чтоб ты срал дальше чем видел. Пока не поймешь, что из-за таких как-ты, современные игры стали полным дерьмом. Надеюсь ты все осознаешь и станешь заниматься чем-нибудь более полезным.
Есть список файлов с локальным путем, уровня "Folder A/Folder B/My File", который я скармливаю тулзе (закрытая, не моя) которая обрабатывает файлы, при этом в полном имени файлов заменяет все косые черты и пробелы на нижние прочерки: "Folder_A_Folder_B_My_File".
Моя задача распознать сигнатуру и определить, что это "Folder_A_Folder_B_My_File" имеет отношение к этому "Folder A/Folder B/My File". Вернуть все обратно.
Есть какие нибудь мысли? Если бы я запретил пробелы и прочерки в именовании файлов, то все просто, но я не могу этого сделать.
Условия: 1. Это не путь на диске, а локальный путь в документе приложения, поэтому никаких GetFullName(). 2. Я не могу заменить косые черты. Они формируют правильное отображение файла и эти правила я не могу изменить.
>>2655744 Я могу решить задачу в лоб, типа сравнивать две строки посимвольно и при конфликтном символе переходить к сравнению списка возможных символов (пробел или косая черта). Если ни то и не другое, то выдавать false.
>>2655748 Ну скормил ты тулзе файл, а че дальше-то? Она ренеймит и кидает в какой-то каталог или что? И тебе нужно заменить исходных файл из жирно каталога?
Вопрос по DI не в контексте asp. В asp dbcontext обычно регают как scoped, дальше пайплайн сам создаст скоуп на каждый http реквест и все заебись. Как быть не в asp? У меня также есть dbcontext, который прокидывается в хэндлеры медиатора. Я могу в теории сам создавать скоуп через фабрику в диспетчере, где вызывается медиатр, чтобы все команды и квери получали один инстанс на вызов. Но это выглядит как дрочево, т.е мне придется ещё и фабрику как зависимость прокинуть. С другой стороны мб регать как transient, но тогда остается проблема, что хэндлеры получат каждый по контексту? Сейчас скоуп работает как синглтон. Как бы вы регали dbcontext не в asp? Кроме как руками скоуп делать есть варианты?
>>2649578 (OP) Кто-нибудь, помогите! На работе нужно сделать надстройку для excel, используют версию 2010 года. Я начал сначала по гайдам с vba делать, но потом перешёл на c#, ибо насколько я понял это более гибкое решение. Создал проект, начал реализовывать первый какой никакой функционал, и обнаружил, что как будто кроме меня этим никто толком и не занимался, в интернете вообще нет информации толковой, единственное что хоть как-то помогало это документация от майков, но там очень много непонятного (в том числе из-за того, что язык я почти не знаю, изучал только python.) Быть может есть какие-нибудь ресурсы с этим? Ну форумы, статьи, видео, книги и т.д. на примете? Желательно особенно про сводные таблицы информации. С меня как обычно.
>>2655751 >Она ренеймит и кидает в какой-то каталог или что? Именно. Тулза конвертирует файл в другой формат, но ради универсальности с другими приложениями ренеймит полное имя файла. Сконвертированные файлы кидает в каталог.
Моя задача импортировать эти файлы обратно, но расставить всё на свои места в иерархии документа, заменив старые экземпляры импортированными.
Все что мне доступно — это стринговая информация. Я думал мб есть какие-то регулярные выражения для подобной ситуации.
>>2656035 >сделать надстройку для excel, Макрос или плагин? Каким образом ты взаимодействуешь с приложением? Или ты типа создаешь свое приложение, которое запускает эксель и пердит в него?
>ибо насколько я понял это более гибкое решение. Главное чтобы эта гибкость не порвала твою неподготовленную для гибкости жопу.
>как будто кроме меня этим никто толком и не занимался Та же ситуация. Начинал писать на vba для CorelDraw, Rhinoceros. Никому это не нужно, все пробуешь методом тыка. Потом перешел на написание плагинов на VB.NET. Но у меня для каждой проги был свой мертвый форум, а через маркет плейс вижуал студии скачивал шаблоны для создания плагинов програм нейм. Названия форумов не всегда очевидны. С экселем не работал.
Ну что могу сказать? Если ты не хочешь положить несколько лет на это дерьмо, а потом выбросить в помойку, то юзай vba. Перейти с бейсика на шарп — дело одной недели.
>>2656093 > Макрос или плагин? Каким образом ты взаимодействуешь с приложением? Делаю надстройку, а именно панель инструментов. Сейчас проблема в том, что я не понимаю как можно работать с полем с датами (получать список выделенных или выделять нужные). Прикрепил скрин, должно стать гораздо понятнее.
> Главное чтобы эта гибкость не порвала твою неподготовленную для гибкости жопу. Тут ты прав, но я постараюсь
> Никому это не нужно, все пробуешь методом тыка. Потом перешел на написание плагинов на VB.NET. Но у меня для каждой проги был свой мертвый форум, а через маркет плейс вижуал студии скачивал шаблоны для создания плагинов програм нейм. Названия форумов не всегда очевидны. С экселем не работал. Все, что у меня работает тоже сделано методом тыка, понимаю. Возможно поступлю потом так же.
>>2655744 Если я правильно понял твою задачу, то просто вырезаешь в обеих строках спорные символы и сравниваешь, что получилось. Если совпало, то значит это одно и то же. Можешь не вырезать, а заменять (точно так же в обеих строках) на какой-либо общий символ, который не может встречаться ни там, ни там (ну или эскейп последовательность).
Вам нужно просто понять, что мой успех он неизбежен. Вам стоит смириться и сдаться с этим. Моя дисциплина самая прочная на Земле, как сплав хрома, кобальта и никеля. Моя мотивация как у льва с утра - бежать быстрее антилопы, чтобы её съесть. Вам нужно ПРОСТО смириться и начать плыть по течению, пока я прорабатываю все кишочки и устанавливаю все кафки.
Помогите пожалуйста. Есть .NET Core WEB API проект (.NET 7), и я его опубликовал как Windows Sevice на определенной машине. На самой машине до эндпоинтов достучаться можно, через localhost. Теперь нужно достучаться до них с другой машины. Админы говорят что порты открыли (443, 80, 5000) 5000 потому что localhost открывается на нем. С другой машины доступа нет, скорее всего я чего-то не добавил в сам проект. Что мне нужно сделать? Я пытался поставить URL самой машины через UseUrls, но это не перезаписало дефолтный URL, сервис все равно доступен только через localhost. Я перерыл весь гугл но момента похожего на мой не нашел. Во многих примерах есть класс Startup которого нет у меня, нужен ли он для UseUrls? Не понимаю.
>>2656110 >Делаю надстройку, а именно панель инструментов. VSTO?
>я не понимаю как можно работать с полем с датами Ну все языки используют одну и ту же библиотеку с одними и теми же методами. Тут только гуглить похожую задачу, смотреть какие методы используются и пытаться адаптировать под себя.
Я эксель вообще не знаю. В таких ситуациях все упирается в знания функционала api.
>>2656218 >операции со стоками. Ну ясен хуй 'операции со строками', если ты сравнивать их собрался. >>2656218 >но нужно как минимум два прохода по символам Какие проходы? Ты там в цикле символы что ли менять собираешься?
>>2656046 Сделай конвертер имён сам, полученные имена пихаешь в словарь, он будет у тебя содержать оригинальное имя и то, которое сделает тебе тулза сторонняя Потом берешь все файлы в папке вывода, ренеймишь, пихаешь обратно по пути из словаря
(Код примерный) foreach var f in Directory.GetFiles(путь выхода тулзы сторонней){ var oldPath = dictionary[f.Name] f.Name = Path.GetFileName(oldPath) File.Move(f.Path,oldPath) }
>>2656322 >Ты там в цикле символы что ли менять собираешься? У тебя сначала 1. идет цикл замены символов одной строки 2. идет цикл замены символов второй строки 3. цикл сравнения двух строк Три цикла
>Ну ясен хуй 'операции со строками' Я имел ввиду, что рождается новый экземпляр строки. Replace создаст еще одну строку.
>>2656361 >1. идет цикл замены символов одной строки >2. идет цикл замены символов второй строки >3. цикл сравнения двух строк Хуйней не страдай. Под капотом всегда где-нибудь да будет цикл. Либо на уровне шарпа, либо на IL, либо еще глубже. Тебе не похуй ли? Главное, что не ты сам руками перебираешь. >>2656361 >Я имел ввиду, что рождается новый экземпляр строки. А тебе не похуй ли, что там рождается? Ну если ты байтоеб дохуя, замени на StringBuilder.
>>2656191 несмотря на то что это типа контекст это все равно что работать с бд в обычном режиме. нужна база? - открыл, почитал/записал, закрыл. И тут DI не нужен. Просто в asp.net есть удобный scope куда можно это приатачить и тогда никто не забудет закрыть коннект или вернуть в пул. в других приложениях ты сам открываешь когда тебе нужно и закрыаешь, когда не нужно. И никакого смысла цепляться за DI scope нет.
1 вот где у Dictionary метод GetOrAdd 2 Convert.ToHexString выдает HEX строку в верхнем регистре. И там внутри использует HexConverter которого можно попросить дать другой регистр сразу....но он internal 3 StringBuilderCache - интернал 4 ValueStringBuilder - интернал 5 unsafe timer, который не захватывает ExecutionContext (а вместе с ним AsyncLocal) - интернал 6 ListDictionary дженерик версия вообще где? 7 туда же HyvridDictionary 8 сколько лет просит народ сделать настройку для задания ConfigureAwait для сборки. 9 WPF за столько лет не обзавелся диалогом выбора папки 10 SortedList внезапно не "сортированный список". 11 StreamReader.ReadLineAsync возвращает таск. 12 Что там у "byte order" у BinaryReader 13 ну сделайте вы уже системный тип Unit. жалко что ли. 14 а можно мне офф MemoryStream основанный на чанках или пуле? Они то выдали, но блин такое неудобное - управления памятью закрыто. Нет чтобы просто дать возможность передать свой пул, а там хоть чанки, хоть тачанки, хоть шаредпул. 15 контракты похерили (в итоге каждый мудрит свой Guard/Requires), зато себе сделали либу для студии.
>>2656632 правильно. и зачем нужна стандартная библиотека. только велосипеды (как делает буквально каждая софтина на шарпе), только хардкор )) ps: где ты увидел байтоебство в этом списке я вообще хз. но шарписты - люди с причудами, увидеть могут многое.
>>2656534 Ты имеешь ввиду напрямую писать что-то вроде using (ctx = new AppCtx())? 1 А тестировать как? 2 В моем случае два варианта. Прямо в хэндлерах медиатора создавать, тогда на каждый реквест из другого приложения в моем будет создаваться n раз контекст. N раз потому что неизвестно как построится цепочка вызовов, для каждого реквеста она своя и может содержать несколько вызовов хэндлеров. Либо я открываю контекст где-нибудь, где происходит диспетчеризация вызовов и тащу это на каждый вызов команды, закрываю по возвращению к клиентскому коду. Просто я подумал, что мне будет выгоднее настроить все похожим с асп образом т.к тулза тоже обрабатывает запросы, но не http
>>2656660 >1 А тестировать как? вопрос "как тестировать" сразу встает когда видишь ctx = new AppCtx()) и мс на это дело говорит - суй подставную бд типа sqlite или плоди огород в виде репозитариев (и тогда зачем нам вообще контекст и тяжелый EF)
в общем то я не использую EF ибо тяжело и неудобно.
2 Не ambient context никто не отменял. Другое дело что применение его - очень спорная штука и не всегда возможна.
>все похожим с асп образом т.к тулза тоже обрабатывает запросы ну если ты можешь создать scope ну создай почему нет (и не забывай про ambient context). Но обычно весь скоуп это просто using
там только 6+7 частично можно сказать "экономим байтики в памяти", а остальное - банальный оптимизатор под перфоманс, причем оптимизации высокого уровня
просто если ты привык писать медленное и большое - ну что ж...
>>2655732 Нахуй ты высираешься, если тебе нечего сказать по делу, животное обоссанное? Игры у меня уже есть готовые. И заработал я на них уже больше, чем всё твоё нищее семейство уродов вместе взятое за всю жизнь (на пике лишь малый процент). Давай ещё что-нибудь высри, посмеюсь с обезьяны убогой.
>>2656742 >мульён долларов Лол, хоть бы один разряд скинул для приличия и правдоподобности. Люди с такими доходами нанимают кодо-макак, а не советы на двачах спрашивают. Впрочем подозреваю что это возможно доходы галеры, на которую ты гребешь.
>>2656677 >ambient context Никогда об этом не слышал, почитал, спасибо. Я так понял это некий синглтон, который шарит какой-то ресурс и доступен всем. Поправь, если не прав. Большинство инфы, что нашел утверждает, что это антипаттерн и обычно не применяется. >обычно весь скоуп это просто using Да, я просто прокидываю вызывающему коду фабрику, которая создаёт скоуп через юзинг на каждый запрос, получаю диспетчер и дальше через него продолжаю конвейер обработки запроса. Так на каждый запрос контекст создаётся один раз и используется сколько нужно. Немного напрягает, что через эту фабрику можно получить провайдер, но у меня она буквально в одном методе на 5 строк кода задействуется, так что может и ничего
>>2656792 >что это антипаттерн антипаттерн он типа потому что делает свою работу неявно. А явное лучше неявного...пока это явное не вызывает свои проблемы. так что тут выбор из двух равных зол 1 неявность есть неявность 2 передавать явно по всем уровням кучу параметров, причем которые не имеют отношения к логике.
>это некий синглтон, который шарит какой-то ресурс и доступен всем Нет. Ты что то задаешь и она летит дальше по уровням вместе с ExecutionContext и может быть получено внутри твоего кода.
Прямой пример такого: TransactionScope ты можешь получить транзакцию внутри скоупа через Transaction.Current. и несмотря на то, что это статическое свойство - на деле оно выдаст тебе значение в рамках твоего exeсution flow
>>2656742 Даже если допустить что это правда, как это отменяет факт того что ты ебучая безрукая обезьяна, которой ссут в рот по любому поводу, а за неумение перекладывать жсоны насрали на ебало без задней мысли?
Пиздуй к юнитидебилам, нанимай кодомакаку или инвестируй оставшиеся от лечения СПИДа жопы деньги в курсы программирования
>>2656742 Помнишь меня? Я твой бывший проект менеджер. Я узнал тебя по твоим шизоидным словам и высерам. А помнишь, как мы всей галерой нассали тебе в кружку прошлой зимой, на корпоративе? Ты ещё выпила, облизнулась и попросила добавки. А потом тебя пришёл забирать твой ёбырь, тот самый дворник, который на Вернадского изнасиловал собаку и получил условный срок за то, что украл плавленный сырок в магазине. Он зашёл ресторан, все стали смеяться, а ты обосралася под себя от стыда, а потом сказала, что всю жизнь будешь ненавидеть изучать дотнет, но недавно, когда ты в очередной выставил доходы всей галеры за свои, чтобы их унизить, то они пустили тебя по кругу, после чего тебе наложили на анус восемь швов. Как поживаешь?
Ранее уже писал на эту тему, но тут конкретизирую, ибо немного продвинулся.
Задача: Пишу надстройку в excel (vsto c# excel interop), а именно ленту (панельку с кнопками полезными) Проблема: Не могу установить свойство Visible класса PivotItem, подробности на прикрепленных скринах. 1 пик - наглядно то, что я хочу делать видимым 2 пик - кусок кода кнопки, которая должна это сделать, там же исключение
>>2656970 Спустя N часов ручного перебора выявил, что все работает, если Это: pivotItem.Visible = true; Заменить на это: field.PivotItems().Item(pivotItem.Name).Visible = true;
>>2657074 Похоже pivotItem не является экземпляром списка, либо какой-то другой тип. Но это очень странно. Сравни экземпляры неработающего и работающего pivotItem ради интереса
Вместо месседжбоксов пиши инфу хотя бы в Debug.WriteLine("твое сообщение"), иначе заебешься отключать 10500 месседжбоксов при отладке, особенно когда в ход пойдут циклы. Пишется сообщение в окно интерпретации (если оно не открыто).
Возможно при работе с экселем это будет геморно, тогда один раз настрой себе логгирование, либо создай тестовое окно с листбоксом каким нибудь и печатай туда.
А еще не пиши вот так "Min: " + DateMin.ToString() + ", Max"
А пиши хотя бы вот так $"Min: {DateMin}, Max"
Т.е. перед строкой ставишь знак доллара, далее пишешь сообщение одной строкой $"Min: , Max" без мудоебских конкатенаций, а потом в эту строку вставляешь в любом месте данные в фигурных скобках, для которых автоматом будет вызван метод .ToString(). Так удобнее.
Мне нужно преобразовывать html страницу в image и отдавать файлом на клиент. Нашел два варианта: с помощью чужого апи и с помощью программы wkhtmltoimage. С помощью апи не хочу, там ключ передавать нужно, к тому же наверное лимиты есть + задержка. Второй вариант работает хорошо, с нугета скачал врапер, быстро работает и устраивает. Норм ли хранить на бекенде эту программу? Враппер только аргументы ей передает, а сама она на плюсах написана. Может есть решение в прямо шарпах? Хотелось бы, чтобы css тоже поддерживался, но для меня главное просто чтобы он из таблицы html делал картинку
>>2657152 > Похоже pivotItem не является экземпляром списка, либо какой-то другой тип. Но это очень странно. > Сравни экземпляры неработающего и работающего pivotItem ради интереса У меня голова от этого шарпа уже кипит, может потом...
> Вместо месседжбоксов пиши инфу хотя бы в Debug.WriteLine("твое сообщение"), иначе заебешься отключать 10500 месседжбоксов при отладке, особенно когда в ход пойдут циклы. Пишется сообщение в окно интерпретации (если оно не открыто). Спасибо, так и сделаю.
> Возможно при работе с экселем это будет геморно, тогда один раз настрой себе логгирование, либо создай тестовое окно с листбоксом каким нибудь и печатай туда.
> А еще не пиши вот так > "Min: " + DateMin.ToString() + ", Max"
> А пиши хотя бы вот так > $"Min: {DateMin}, Max" О, это как f-строки в питоне, прикольно.
>>2649578 (OP) Проработал год и 3 месяца в мухосранской продуктовой конторе. Недавно сократили штаб. На проекте про SOLID и паттерны знал только я . Нет опыта работы с микросервисами ,докерами и брокерами сообщений. Уже месяц не могу найти работу. Что посоветуете делать ? Идти в кассиры? На собесы не зовут, я даже не знаю какой у меня уровень . Субд использовал Mysql, но как я понял,что он никому нахуй не нужен
Все таки коллекции в шарпе это тупость. Постоянно WTF при работе с ними
Накосячили с IReadOnly*, и вот спустя 2 десятка лет додумались что нужны фрозен коллекции.
Вот у меня допустим byte[] и как мне его сделать риоднли? А никак. AsReadOnly вернет ReadOnlyCollection что вообще не то же самое. Сразу идут лесом AsSpan и CollectionsMarshal ничего не знает ни про какие ReadOnlyCollection по понятным причинам.
использовать List? так мне спан нужен. Ну ладно есть CollectionsMarshal, вот только ему нужен List который не ридонли ни в каком месте.
вот будет шарп 8... а там точно будет FrozenArray? думаю нет. И все методы что принимают byte[] не будут знать как с таким работать, то есть ситуация так и останется - "а ты не меняй вот. ишь че захотел - ридонли ему подавай - просто не меняй ничего и будет тебе риондли. а если ты поменял то ссзб. И вообще, ты шарпист же - терпи. Контракты? Безопасность? все это для лошков. Шарпист не боится вернуть Ilist и верить что никто его не изменит, не боится также null и вообще он смелый и упорный (в плане обхождения граблей)."
>>2657446 Можешь рассказать что вы делали на работе и какой стек использовали? Я пока ещё новичок, хотел бы узнать о том, что используют на реальной работе, чтоб понять на что делать упор. Субд пока только mssql и sqlite использовал, разве в них есть различия с mysql, чтобы было сложно перейти? Они ведь все примерно один sql используют. И разве сейчас работают напрямую с базой не через orm помимо каких-то специфичных ситуаций? Спасибо если ответишь
>>2657971 >Субд пока только mssql и sqlite использовал Я не он, но поотвечаю.
SQLite в энтерпрайзе не используют, т.к. там в ней слишком много ограничений и нет необходимости в ее легковесности и портабельности. MSSql используют много где, но сейчас наступила пора импортозамещения и все массово переходят на постгрес. MySql на шарпе вообще ни разу не встречал, честно говоря не знаю почему, т.к. мало с ней знаком. Еще раньше попадался Oracle, но с него уже почти все слезли и новых проекто начинать точно никто не будет. Сейчас практически везде рулит постгрес поэтому учи его - не ошибешься.
>>2657971 >И разве сейчас работают напрямую с базой не через orm помимо каких-то специфичных ситуаций? Даже если у тебя будет проект с философией ORM-онли, то ситуаций когда тебе по работе придется лезть в базу и писать разные запросы будет очень много. Для тестов, анализа, починки сломанного и т.д. Плюс опять же, чтобы нормально и продуктивно работать с ORM, нужно как минимум иметь представление, что она делает под капотом. Ну и на каком-то этапе тебе возможно придется даже разбирать построенные ей запросы, чтобы понимать какого хуя БД так тяжело ворочается.
>>2657485 Я про случай для десктопного приложения. Вообще у логгеров есть модули способа вывода, которые подключаются по необходимости. У меня так в файл и дебаг-окно выводится одно и то же сообщение, но конкретно расширения для вывода в месседжбокс я почему-то не увидел, хотя совершенно очевидно, что на десктопе при Error и Critical Error в 99% случаев требуется уведомление пользователя месседжбоксом. Хотя есть шанс, что такой подход может обернуться пердежом тысячей диалоговых окон.
Я предполагал, что логгеру можно хотя бы передавать делегат, который он мог бы запускать. А сейчас получается лишняя работа и дублирование информации.
А еще мне непонятно как регистрируется код ошибки. Возьмем к примеру условную ошибку в вижуал студии "XLS0112". Кто дал название этой ошибке? Это все делается вручную или есть подход делать это автоматом? Или создается какая-то база данных всех ошибок? В какой последовательности регистрируются? Разработка идет непоследовательно и может получиться так, что сначала идет ошибка №112, а следующей строкой ошибка №330 — это норма?
Есть стиль для радиокнопки со свойством выравнивания по левому краю (пикрил 1). Есть 4 радиокнопки в окне, использующие данный стиль (пикрил 2). Одна кнопка сама по себе, а три остальные находятся в PopUp. Так вот, те, что в попапе, игнорируют состояние свойства, определенное стилем (смотрите окно свойств). А если я укажу явно способ выравнивания, то окно свойств вообще отказывается визуализировать (пикрил 3).
Первая радиокнопка не имеет подобных аномалий. Замечу, что это касается только окна свойств, по факту кнопка ведет себя соответствующе стилю. Я могу еще понять, почему не отображается актуальный размер кнопки, ведь попап скрыт, но выравнивание же не зависит от внешних факторов?
>>2658172 Потому что основная задача логгера сохранять историю событий (запросы, ошбики и т.д.) в логгируемой системе в каком-либо хранилище (окно консоли, файл, БД и т.д.). Причем делать он должен это максимально быстро и даже в случае падения основной системы. Уведомление пользователей это другой слой абстракций и ты его либо реализуешь в основной системе отдельно, либо если тебе так нужно уже после логгера отдельным сервисом.
>>2656771 > Люди с такими доходами нанимают кодо-макак, а не советы на двачах спрашивают Люди с такими доходами сами решают, что им делать. Мне нет смысла нанимать людей, открывать компанию, в разы увеличивать расходы и ответственность, и постоянно бегать кабанчиком. Когда я могу спокойно сидеть дома, получать пассивный заработок и потихоньку, в своё удовольствие, создавать новые игры.
>>2656870 >>2656871 Нормально работо-скот порвался. Да, кстати, вчера пришла выплата с рекламы. Сколько вам и вашим нищим, убогим семействам и всей родне придётся работать, чтобы столько заработать? А у меня это просто пассивный заработок. Один из нескольких, если быть точнее. Удачи поработать на дядю, клоуны. Можете не отвечать, мне более не интересно тявканье нищего говна.
>>2658033 >все массово переходят на постгрес Спасибо, буду его использовать >придется лезть в базу и писать разные запросы Это делается через ado net? Его я ещё не смотрел. Пока что только через mssql management studio писал запросы. Учился на базе northwind, т.к ее рекомендуют майкрософт и читал теорию баз данных про нормализации, индексирование и прочее, но пока не приходилось применять в проектах.
Значит джуну нужно с этим ado net разбираться? Сейчас я изучил сам шарп, asp net razor pages, asp net web api, не изучал пока mvc, signalr, grpc. Смысла mvc не понял, то же самое ведь делает razor pages. Решил, что это пережиток прошлого и не очень нужно сегодня. Да и на веб апи можно сделать то же время, просто spa на клиенте использовать. Путаница какая-то, эти две технологии делают примерно одно и то же в контексте создания сайта.
>>2658498 >Можете не отвечать, мне более не интересно А я отвечу, т.к. знаю, что ты все равно прочитаешь.
Все равно, как если бы наркобарыга пришел и начал задавать вопросы как ему лучше толкать наркоту, был бы справедливо обоссан и потом начал возмущаться в стиле "зато я бабки гребу лопатой, а вы нищеброды" То что ты дохрена зарабатываешь, не отменяет того. что ты зарабатываешь на дерьме и место твое у параши.
>>2658610 >Это делается через ado net? Нет, я не это имел в виду. Тебе придется периодически брать в руки инструмент вроде mssql management studio, или PgAdmin (постгресовский инструмент), подключаться через них к БД и смотреть, что там внутри твориться и правльно ли отрабатывает твое приложение. А для этого придется составлять запросы для выборки данных и помещения каких-нибудь тестовых наборов данных в БД. И лучше всего используй DBeaver CE. Он бесплатен и позволяет подключаться практически к любому виду баз, составлять любые sql-запросы и намного удобнее и быстрее чем родные клиенты для разных БД.
Насчет ADO.Net - х.з. стоит ли его учить вообще, с вероятностью в 90% тебе придется работать либо с EF либо с Dapper-ом (которые кстати по сути надстройка над ADO). Я за последние несколько лет даже упоминаний об ADO в проектах не встречал.
Насчет razor pages и MVC не скажу, т.к. на шарпе работаю только до WebAPI, дальше уже обычно идет что-нибудь вроде реактового UI, либо ничего не идет. Razor наверное понадобится знать только если в Blazor пойдешь, т.к. он вроде как является их развитием. И SignalR тоже там где-то трется.
А вот grpc надо изучать, т.к. это по сути уже стандарт и в случае микросервисной архитектуры точно с ним столкнешься. А так же еще брокеры сообщений вроде RabbitMQ тоже понадобится знать.
>>2658683 >лучше всего используй DBeaver CE Спасибо, учту >Насчет ADO.Net - х.з. стоит ли его учить вообще, с вероятностью в 90% тебе придется работать либо с EF либо с Dapper-ом Я так и думал до этого. >WebAPI, дальше уже обычно идет что-нибудь вроде реактового UI Кстати сильно ли нужно знать эти js фреймворки? Слышал мнение, что новичка вряд ли возьмут не фулстек и нужно одновременно знать .net со всеми необходимыми технологиями и js/ts с его фреймворками. Я сначала использовал голый ajax, потом Vue.js, но никогда не изучал их как .net, просто использовал для написания клиентов к своим проектам. >SignalR тоже там где-то трется Хотел его изучить, т.к думал, что он также нужен как и grpc, но видимо это что-то специфичное как Blazor. Real time communication звучит как что-то полезное. >grpc надо изучать, т.к. это по сути уже стандарт и в случае микросервисной архитектуры точно с ним столкнешься. А так же еще брокеры сообщений вроде RabbitMQ тоже понадобится знать. Пока имею очень смутное представление о микросервисах. Кажется, что это набор проектов webapi, которые как-то между собой коммуницируют, возможно с помощью вот этого RabbitMQ или каких-то ещё технологий. Я смогу изучить как работать с микросервисами дома на локальной машине, как со всем остальным до этого? Везде в вакансиях где пишут про микросервисы есть что-то вроде "требуется опыт работы с микросервисами", то есть подразумевается, что человек уже на другой работе имел дело с ними? Вот я и подумал, что их изучают уже на работе в реальных проектах.
>>2658610 >Смысла mvc не понял, то же самое ведь делает razor pages не не то же самое. MVC/MVP/MVVM - разные подходы логического разделения приложения. У каждого свои достоинства и недостатки. И не пережиток прошлого это. Как раз наоборот - razor pages для любителей "пережитка прошлого", кто привык там писать в стиле вебформс и "не нужным мне ваши MVC, и не заставите, я привык как в вебформс" (это как люди после винформс идут в WPF и все равно пишут так будто они в винформс)
>>2658805 >Кстати сильно ли нужно знать эти js фреймворки? Слышал мнение, что новичка вряд ли возьмут не фулстек и нужно одновременно знать .net со всеми необходимыми технологиями и js/ts с его фреймворками. Новичков да, очень часто берут на позиции где минимум 30% будет работ по фронту. Потом уже когда появится опыт сможешь говорить на каком органе ты фронт вертел и почему не будешь им заниматься. Но в любом случае знание js и какого-нибудь js-фреймворка типа react или angular будет очень большим подспорьем в работе. Как минимум придется разворачивать себе тестовые стенды с фронтом, дебажить его и т.д. Т.е. понимание как это работает может очень пригодиться. >>2658805 >Я смогу изучить как работать с микросервисами дома на локальной машине, как со всем остальным до этого? Теоретически да, но я бы посоветовал прикупить себе какую-нибудь дешманскую vps-ку и на ней экспериментриовать. Так во первых лучше изучишь различные сетевые технологии, поймешь как происходит деплой и не будешь убивать свою рабочую машину. >>2658805 >то есть подразумевается, что человек уже на другой работе имел дело с ними? Таки да. Т.к. даже если ты у себя дома сможешь развернуть какой-нибудь кластер с микросервисами, ты вряд ли сможешь обеспечить его нормальной нагрузкой и реальными задачами.
Собственно вся суть, почему везде требуют именно коммерческий опыт, потому что только на реальных проектах ты сможешь научиться решать реальные задачи нужные бизнесу. Т.е. не вылизанные учебные недопроекты в вакууме, где все расписано и все понятно. А стандартные "Распараллелить вот чё там под этой кнопкой на 2-3 потока, если получится" и "тут где-то проблема, надо найти и устранить".
Есть какая-нибудь возможность запретить contextmenu(который по умолчанию в текстбоксах) использовать мой стиль textblocka? Есть какой-то легкий способ или указание ключа для стиля будет самым легким? У меня просто много текстблоков и не хотелось бы юзать ключ
Во первых он не говорит о том, что джава лучше шарпа, а просто сравнивает фичи которые появились в джаве на пару лет раньше чем в шарпе. И в сравнении они получаются плюс минус одинаковыми, за исключением некоторых мелочей.
Во вторых. В шарпе если, что-то появляется и оно народу заходит, то этим начинают пользоваться. В джаве же ты будешь сидеть хорошо если на 14-й версии, а в большинстве случаев вообще на древней восьмой. И тебе ни тепло, ни холодно будет от этих новых фичей.
>>2659216 С первым апреля от Ника! А почему ты в выходной прибежал в шарпотред кстати? Так сильно горит, что шарп вытесняет джаву из бэкенда даже в российский банках?
Сап. Пытаюсь собрать ASP NET веб приложение на WebForms в VisualStudio 2019 на NetFramework 4.7. Подскажи как поменять версию языка? Интернеты говорят в корне проекта должен лежать файл prjName.csproj, в котором можно поправить свойство. Но файла нет. Есть только веб.конфиг.
>>2659555 Оказалось что в VisualStudio есть две опции при создании нового проекта, пикрелейтед. Новый проект веб приложения имеет *.csproj файл, а веб сайт нет. Если подсунуть файл от веб приложения к веб сайту, он, ожидаемо, не используется.
Я пытаюсь унаследоваться от уже скомпилированного сайта/приложения, который нашел на IIS сервере. По структуре каталога скомпиленного сайта он больше похоже на "веб сайт", поэтому его и использовал при создании нового проекта. Возможно, для веб сайта есть другие опции по изменении версии языка? Или, судя по "имеет ограниченную поддержку MSBuild" оно вообще не умеет в более высокие версии? Хотя сама IDE предлагает обновить версию. Но не справляется и упирается в ошибку.
>>2659718 >.NET 10 или как его теперь начнут называть .NET X > Почему .NET 10 и где .NET 9? > "У нас так принято." - Дословный перевод. Бля, когда же человек отвечающий за нейминг версий продуктов в майкрософте сдохнет нахуй уже. Что винда, что приставки, что фреймворки - сплошной ебанизм в версиях.
>>2659762 Алсо я в курсе, что это первоапрельская статья, но это не отменяет того, что в майкрософте уебанский нейминг версий продуктов. Меня просто тригернуло.
>>2660278 Надо знать алгосы и сисдиз и архитектуру компьютеров, ты должен быть экспертом в этих вопросах. Надо просто уметь написать за выходные на с++ или расте что-нибудь системное типа systemd или прикладное типа транспилятора из питона в сишку, читать исходники опенсорсных системных библиотек и понимать, что в коде делется. Где здеь ты видишь шарп?
>>2660293 Да и нах нужен это ваш фаанг. Просто заканчиваешь в МГУ по программе повышения квалификации на фин математике. Потом защищаешь к.т.н. и идешь устраиваться в финтех. Всяко лучше чем копаться во внутреннем легаси коде гугла.
Котаны, как переопределить метод не меняя название класса и метода родителя? У меня есть длл-ка с кучей классов и методов. Я хочу изменить код одного из этих методов. Но так, чтобы приложенька до обращалась к нему по имени метода в длл, типа дллКлассНейм.дллМетодНейм() , но при этом фактически выполнялась моя функция.
>>2660359 >Как вообще относятся к тем, кто программирует на сишарпе в линуксе? Ну а ты сам как думаешь? Конечно же считают людьми второго сорта и при встрече в лицо плюют.
>>2660359 >Как вообще относятся к тем, кто программирует на сишарпе в линуксе? Ну а ты сам как думаешь? Конечно же считают людьми второго сорта и при встрече в лицо плюют.
>>2658033 Стоит ли мне задрачивать постгри, если я знаю MySql. SQl он и в африке SQL, только со своими нюансами, или есть вариант свичнуться уже на рабочем месте?
Вот не пойму. Допустим написал проект на текущем дотнете 7 версии, а через два года выйдет какой-нибудь 9 дотнет. Как работать с этой же версией через пару лет?
>>2660830 > только со своими нюансами В том-то и дело, что нюансов куда больше, чем сам SQL. Начинаешь создавать таблицу и сразу вспотыкаешься: "ой, а где автоинкремент, что за SERIAL, сложна, нипанятна". Лучше заранее подготовится.
>>2660853 Поэтому под версией указывается в скобочках (долгосрочная поддержка) или не указывается. Можешь осесть на долгосрочной (LTS) и минимум 3 года не париться.
>Ты представляешь объём работы по переписыванию даже среднего по размеру проекта на новый дотнет? Сколько? В конфигурационном файле одну строчку переписать? Ты же не с дотнета на кор пересаживаешься.
>>2660877 >Ты представляешь объём работы по переписыванию даже среднего по размеру проекта на новый дотнет? Зависит исключительно от архитектуры. Если изначально написано нормально, то у тебя максимум месяц уйдет даже на 10-к приложений. А если хреново, то ты и одно будешь полгода дрочить.
>>2661247 >если исходные условия подогнать под мой неправильный ответ, то он станет правильным Работаешь тоже так? - Сделай нам проект - Готово, держите - Но твое говно не работает - Оно работает, если ... если ... если ... если ... Ебало представили?
Поцоны, у вас все нормально после перехода на .NET 7? Доложите обстановку. У меня в аспе, перестали генериться дефолтные guid айдишники юзерам в UserManager<User> _userManager.Create();, просто пустые строки, даже не null. Кто-то знает как это фиксить? В интернете нихуя.
Мужики, здарова! Сразу скажу что я фронтенд-реакт-макака, поэтому сильно не бейте. Вообщем, мне нравится бекенд, потому что вся магия в основном происходит именно на нем, поэтому в перспективе хочу стать фулкеком с упором на бекенд. Начал свой путь в программировании именно с фронтенда, потому что тупо проще. Выбор у меня был между нодой, пыхой и сисярпом (джаву не, спасибо). Нода гамно из-за всратого npm, пых просто не нравится почему-то, а вот сисярп смотрится самым оптимальным. Кого не спрашивал, все его хвалят. Дак вот, хотел бы спросить, как мне, новичку, лучше всего начать и с чего? Из вариантов я подобрал для себя: 1. Дока мелкософта 2. Метанит 3. Видосики на ютубе. Может быть кто-то знает годные курсы на ютубе?
И ещё вопрос, с какими сложностями я могу столкнуться и как мне их лучше всего избежать? Ну, например, подучив что-то.
>>2661618 >опрашивать для каждого вывода? Да. >а как посчитать общее количество, если система оффлайн и опросить ее невозможно? Вообще в нормальных системах в выводе с пейджингом присутствует поле вроде Total, означающее общее количество элементов на всех страницах.
>>2661830 Да хоть с хуйдой. Если у тебя в организации по регламенту винда - работаешь на винде, если линукс - на линкусе, если пидорство - на маке. Если требований нет - на чем хочешь. Я вот когда на толчке сижу размышляю, вообще на телефоне с андроидом програмки под .net пишу. Главное чтобы твой конечный продукт запускался на системе целевой машины.
>>2661917 Я раньше общался с одним челом, который писал на сишарпе, и он говорил, что когда станет богатым, то купит виндовс. Поэтому писал в линупсе в монодевелопе каком-то.
Хм. Вопросик. А как сделать в одном потоке типа многозадачность?
Вот допустим, я хочу чтобы у меня был один поток на все приложение, но, была типа очередь "запуленных" задач. И типа ход выполняю-выполняю, бац, чет долго выполняю, го следующую посмотрим, начал ее и так по всем "задачам" которые запуленны, потом - хобана - вернулись к месту где остановились, посмотрели, че да как и если надо - продолжили.
>>2662018 Хм. Хм. Только такое пока что придумал, пока ждал ответа... Но это не то. Тут я явно должен сказать в методе - на, бери управление и делай че-то. А я бы хотел не так, хотел бы чтобы сам поток был умный и такой: Ля, чет долго я тут сежу-пержу, го посмотрим че другим задачкам надо.
Сап двач, помоги с тестовым заданием на работу в 100к наносек. задача следующая дан исходник на java с одним классом и одной функцией в нём и нужно с помощью antlr распарсить этот метод и узнать все возможные результаты её работы
Драститя, простите грешного что полез сюда нихуя не зная (банальных знаний C даже не имею, лол, не хватило усидчивости для изучения и пынямания как и что делать, ебучие самоучители это банально "вставь наш код - запусти - радуйся - ебись в рот"). Суть в чём: нужно скомпилить тулзы одного чувака написанные на шарпе, вчера с горем пополам один чувак-пендос помог мне собрать другие тулзы, а с этими в душе не ебу чё делать, ошибка на скрине. Ссылки: 1. Что компилю https://github.com/gibbed/Gibbed.Avalanche 2. Либы к ней https://github.com/gibbed/Gibbed.ProjectData/ 2.1. https://github.com/gibbed/NDesk.Options 2.2 https://github.com/gibbed/Gibbed.IO/tree/e8984c5c3fe8ca73631bcd3152118b768dd1a19a Либы просто закинуть в папку Gibbed.Avalanche убрав с папок либ постфиксы типа "-main" или "-НАБОРЦИФРИБУКВ". Помогите тупому, с меня нихуя по традиции.
>>2662427 Дрочит конечно каждый как хочет, но будут смотреть как на дурачка, всё-же шарпы это что-то под винду и UWP, логично будет заниматься языком там, для чего он предназначен.
>>2662427 >А если у меня стоит винда, но я создал виртуалку с линуксом и там программирую на сишарпе. Это нормально или на меня будут смотреть как на дурачка? Смотреть будут примерно так же как если бы ты поставил виртуалку с виндой на линукс и программировал в ней. Ну т.е. долбоебом тебя будут считать не от того на какой системе ты работаешь, а от того, что на виртуалке при наличии живого машины.
>>2662018 >. И типа ход выполняю-выполняю, бац, чет долго выполняю, го следующую посмотрим, начал ее и так по всем "задачам" которые запуленны, потом - хобана - вернулись к месту где остановились, посмотрели, че да как и если надо - продолжили.
В чём смысл перебора коллекции через foreach, если можно получить только копию значения? Во всех нормальных языках этот цикл должен давать две переменные: ключ и значение. К примеру, foreach(key, value in collections) { ... }
Почему микрософты напихали всякой бесполезной фигни в сам язык и дотнет, а для работы с джейсонами используют какую-то левую библиотеку. В чём проблема была добавить это в стандартную библиотеку?
>>2662555 >Во всех нормальных языках этот цикл должен Во первых не должен. Во вторых в C# при необходимости такое можно сделать (хотя оно и будте не нужно в 99% случаев)
>>2662554 Там же не гарантирован однопоток. Мне-то надо это в контексте - попробовать на ARM одноядерном с 128MB оперативки - запустить приложение с полноценным дотнетом. А там-то не только оно будет, но и другие службы всякие, ну и линуксу тоже чет надо. Просто тесты с классическим подходом - приводят к тому - что миллиард тредов создается и большую часть времени - контроллер тратит на то чтобы переключаться между ними. Даже 20 потоков - уже больно.
>>2662925 вот потому eventы и плохая конструкция в шарпе. Берется слепок подписчиков, начинает обходить, а в этом время кто то отписался и ему не нужны никакие вызовы. Но event про это не знает.
В общем то это решение твоей первой проблемы (лок над списком) - не должно быть никакого лока. Должен быть иммутабельный список
Решение проблемы отписки во время вызова придумаешь сам. ты же умный.
>Property 'Pages' does not support values of type 'PageContent'. Пиздец, искал решение проблемы и челы 13 лет назад пишут, что это уже тогда известная проблема и предлагают использовать ебаные костыли. Серьезно? за 13 лет это говно не смогли пофиксить? И это уже не первый раз я встречаю подобое. wpf вообще хоть немного жив?
>>2663668 >>2663670 Та не. Даю кусок IL кода на бумажечке и прошу пояснить, че происходит и какой был код изначально. И как бы можно было изначальный код переписать чтобы было лучше.
>>2663865 На заводах активно применяется, чтобы байтики туда-сюда гонять. Для всяких автоматизаций - тоже активно. Ну и если повезет - бекенд. Если не повезет - фуллстек говнина с блазором. Если сильно не повезет - вебформы.
>>2663865 >Для чего его вообще сейчас применяют если десктоп никто уже не пилит? Половина (ладно, пусть будет треть) русского финтеха на шарпе работает и активно развивается.
>>2663673 >и какой был код изначально. Это по принципу "Если человек пытается ответить на подобный вопрос, то он однозначно долбоеб и нам не подходит" ?
out заменяет собой "обьявление + ref". Чем не сахар? is MyClass variable заменяет собой if(a is MyClass) { ... a as MyClass} - ну вот это самый настоящий сахар.
>>2663896 Если для себя - норм. Если для поиска работы... Какой-нибудь js-фреймворк был бы более в кассу, но в принципе на blazor вакансии тоже попадаются и я бы не сказал, что на них есть особенная конкуренция. В принципе почему бы и нет. Я бы только советовал сразу разделять чтобы бэк был отдельным проектом, а UI на блазоре, тоже отдельным.
>>2663926 А если c Blazor не получится, а будет просто MVC, то это норм считаеся? Допустим два проекта, первый чистый бэк, а второй MVC, который дергает API первого проекта.
>>2663936 Я могу быть хоть горшком (если тебе вдруг от этого легче) - это ничего не изменит в пхп. пхп по рождению обладает откровенно паршивым дизайном языка.поэтому на нем было написано невообразимое количество говнокода. и хоть он с того времени пытался стать похожим на жаву - его наследие навечно с ним. Думаю многие читали статью "фрактал плохого дизайна".
я писал на пхп более 10 лет и был профи в нем. Как и все пхпшники привык не замечать подводные камни и обходить грабли. Но после перехода на питон я понял что это не уровень мастерства, а мазохизм.
никому нельзя начинать изучать программирование с пхп.
>>2664059 >Где я дурак? Если мы говорим про наследование, то где-то в твоем ДНК. Спроси у родителей, может они тоже в молодости полиморфизмом без меры баловались. А если серьезно, ты проебался где-то еще раньше, когда решил, что тебе нужна такая замороченная схема. Т.к. даже если ты сможешь это нормально сделать, оно будет неподдерживаемо и непонятно. Переделывай.
Собственно ситуевина следующая. На одной машине происходит примерно прикриплейд. В результате - второй TCP-сокет никогда не получает запросы. Первый - я не контроллирую.
Меня бьют палкой по башке, за то что запросы не доходят.
Проблема в том, что даже если я в своем приложении - грохну чужое, что очевидно неправильно - запросы почему-то начинают доходить только если я сам перезапущусь, а за это тоже грохают по башке.
Че делать?
Ну. Т.е. какая хуйня. Есть чужое приложение, которое открывает активно порты и оно типа в дуалмоде но типа на IPv4. Есть мое, которое типа тоже активно открывает порты, и оно типа в IPv6 и типа тоже в дуалмоде. Если лежит мое - все нормально до первого доходит, но к нему принципиально IPv6 почему-то не доходит. Если лежит чужое - все нормально до меня доходит, как IPv4 так и IPv6. Если оба работаем - до меня доходит исключительно в случае если порты не пересекаются. При этом все нормально открывается, что и усложнило процесс поиска проблемы.
class A : IA{ void Foo() {}; } class B : IB{ void Bar() {};} class C : IC{ void Buz(); }
class MySupperDupperMegaClassOneToRuleThemAll : IA, IB, IC { private readonly IA _a = new A(); private readonly IB _b = new B(); private readonly IC _c = new C();
public void Foo() => _a.Foo(); public void Bar() => _b.Bar(); public void Buz() => _c.Buz();
Мужики, кто знает куда пропали нугет пакеты в МАУИ проектах? Захотел поиграться, создал проект, а менеджера нугет пакетов нигде нет. Загружаю какой нибудь старый на нет 4 или 5 все на месте.
Пусть определен такой метод. Возможно ли во время компиляции или выполнения проверить, что переданный тип T содержит определение для операции &? Подразумевается, что на место T в вызывающем коде будет передаваться только один из типов byte, ushort, uint, ulong. Делать перегрузку методов со строгой типизацией первого аргумента не хочется. Так же не хочется писать проверку вида if (a is byte aByte) { // выполнить сдвиг } и т.д., да и она скорее всего не поможет, так как выходной результат aByte >> b не получится привести к типу T, указанному как возвращаемый тип метода. Итак, есть ли здесь решение?
>>2665866 Можно. Только вот вопрос - нахуя? Вот серьезно. Чем больше я кодю - тем больше кажутся все эти ограничения - костылями какими-то. Придумываешь сам себе, чтобы хуй пойми зачем. Тесты - все еще писать надо. Все еще надо проверять что у тебя там не запаковано чет. Так на кой хуй жизнь себе усложнять? Делаешь все dynamic и как мужик в 1 строчку проблему решаешь.
>>2665866 А. Насчет можно. Можно в последних версиях шарпа. Да. С тех пор как завезли Generic math. Проблема что оно все еще говно и ты все еще будешь страдать больше, чем с dynamic. А так - берешь кодген и делаешь просто нужные тебе методы генерацией, если так уж боишься dynamic.
Привет, уважаемые господа ! У меня есть программа, точнее плагин к программе, которая работает (и плагин и программа) на C#, но нет инструкций к этой программе и не понятно, как пользоваться одной из её функций. У неё открытый исходный код, который я смотрел, собственно в нём я и нашёл скрытую функцию, и понимаю, как он работает частями, понял, как его активировать (ну я думаю, что понял), но не могу понять, что мне делать дальше и как заставить его работать. Что посоветуете ?
>>2666320 Я не знаю, что это такое, я вообще не программист. Я просто открывал файлы и читал, что там написано. Сейчас попробую это погуглить и посмотреть. Ну гляньте кто-нибудь сами пж, я сам не факт, что разберусь.
>>2666309 > Что посоветуете ? Научиться внятно формулировать что конкретно тебе нужно. Допустим, я посмотрел код твоего этого SteamEmulators. Беглый взгляд дает понять, что оно - смотрит по дирректориям и собирает список статов и ачивок, вроде как просто читает текстовые файлики в нужном формате и парсит их. Так вот. Без того чтобы понять - что тебе вообще надо - как-то лень разбираться. Ну. Т.е. как я понял - есть некая программулина Playnite и плагин позволяет ачивки либо оттуда либо туда отобразить. А дальше - нужно больше входных данных. Что тебе непонятно, что конкретно не работает, почему ты вопрос не задал на гитхабе.
>>2666345 >>2666415 >>2666414 Я хочу разобраться, как использовать эту скрытую функцию. В файле SuccessStorySettings.cs есть параметр EnableLocal, при его включении уже в самом PlayNite появляется менюшка, в которой необходимо указать путь и id игры, я пытаюсь понять, какой именно путь и id мне надо указать. Вот в файле SteamEmulators.cs описано, как он просматривает папки, которые там указаны, или которую ты укажешь, и читает в этих папках ini файлы. Соответственно, я и указываю этот путь к ini файлу, который он должен прочитать, но ничего не происходит, либо, иногда, он пишет, что я не авторизирован в стиме, и ищет SteamKit2 будто бы работает по тому, что написано в SteamAchievements.cs.
Я в общем хочу понять, как этой функцией в пользоваться в целом... Может я какие-то требования не выполняю, или что-то не активировал, чтобы эта функция работала, или я в целом не понимаю, как ей пользоваться.
На гитхабе чел отвечает редко, он сидит либо на редите либо на форуме, а на редите, там разработчик PlayNite банит за любые вопросы про эмуляторы, на форуме тоже.
>>2666455 >>2666415 >>2666345 Вот например, код, из базы данных плагина, который относится к игре, к которой я пытаюсь выкачать достижения. Я менял RAgameid на id игры в стиме, я копировал id из этого файла для того, чтобы вставить его в менюшку в PlayNite, но ничего не получается.
>>2663920 > out заменяет собой "обьявление + ref". Чем не сахар?
Out еще обязывает присвоить значение параметра внутри метода
> if(a is MyClass) { ... a as MyClass}
Ты можешь так написать if(a is MyClass x) Так оно тебе проверить и приведет к типу, если a is MyClass = true и не надо тогда во вложенном блоке ничего городить
>>2666522 >>2666522 Сяп сяп, я понял, как скачивать достижения благодаря API ключу, но не могу понять, как заставить его добавлять достижения из ini файла, созданного эмулятором в базу данных.
Судя по коду на картинке, если я правильно понял, он должен создавать новый файл эмулятора в той же папке, где находится конфиг плагина и переносить туда данные о apikey, название игры, id игры, но я не знаю, как спровоцировать создание этого файла, и всё ещё не понимаю, какие пути указывать в появившейся менюшке (на пике код менюшки, которая появляется в приложении после активации локал), пробовал разные варианты с id и локальным путём файлов. Никакие новые файлы он не создал в собственной базе, только скачал список достижений, а ещё похоже список всех игр со стима и их id, там текстовой файл на 9мб, но как я понимаю, это не то.
В общем теперь мне надо понять, как заставить его перенести данные из ini файла созданного эмулятором по пути AchievementsDirectories.Add("%PUBLIC%\\Documents\\Steam\\CODEX"); , в собственный файл базы данных.
>>2666834 Чел, это опенсорс, а шарп хороший и простой язык для новичка. Чутка поднаторей, разберись. Тут дел то по сути на час времени - форкнуть этот репозиторий, запустить исходники у себя на пк в вижуал студии, посмотреть че там в отладке происходит и поменять код, как тебе нужно. Потом скомпилить, и будет у тебя своя собственная версия этого аддона с нужным тебе функционалом.
Можно ли как-то сделать структуру-заглушку, которая будет использоваться в генериках в качестве TOptional и которая будет занимать 0 байт памяти?
Она нужна для того, чтобы без дублирования кода обрабатывать случаи, когда TOptional нужен и когда он не нужен.
Просто пустая структура (без полей и методов и свойств) занимает 1 байт. И по причинам выравнивая в качестве поля структуры она раздувается до 4 байт. System.Void использовать нельзя в своём коде никак, но и он по информации Маршалла тоже занимает 1 байт, что наверное не правда.
>>2666972 >>2666522 В общем я разобрался, надо было в базе данных плагина найти базу данных конкретной игры, для которой ты пытаешься заставить собирать достижения и отключить параметр "IsManual".
>>2667204 Вопросы требующие копаться в исходниках должны быть описаны в документации. Иначе будь добр - отвечай, ведь ты писал этот код. Или не выкладывай программу в паблик, а пользуйся сам у себя дома, тогда и вопросов не будет. А то хочешь и рыбку сьесть и на хуй сесть, чтобы и чcв потешить, что твоим говном пользуются, и не брать за это ответственность нихуя не делая для этих пользователей. Наглая безответственная эгоистичная свинина.
>>2666816 >Ну так это буквально и есть сахар) Так то, если присмотреться, то 95 конструкций языка можно охарактеризовать как сахар. Даже обычный цикл, это по сути сахар над if - goto. А если копнуть чуть глубже, то в принципе, абсолютно все конструкции, абсолютно любого языка - это сахар, над всего тремя базовыми функциями.
>>2667411 Ну цикл это все таки базовая конструкция А вот автокаст при is уже нет. Потому и ввели через много лет после is как сахар для сокращения необходимости явного каста после is
А вот в котлине is делает смарт каст и это не сахар а базовая функциональность
>>2667421 Я честно говоря не уверен. Я знаю, что для бинарной логики есть три базовых набора - AND-OR-NOT - NAND - NOR Каждый из них самодостаточен и позволяет получить все многобразие, но когда я это изучал, вроде как считалось, что штрих шеффера или стрелка пирса слишком заморочены на уровне электроники, чтобы на них все реализовывать и поэтому предпочтительнее первый набор. Как оно там в нынешнее время - я х.з.
>>2667588 Ну тамошние ответы я видел, и они меня не устроили.
> And I implemented ICloneable<T>, then do I implement ICloneable<Foo>? ICloneable<Bar>? 1. Тут-то я согласен, что для такого случая и нужно, чтобы возвращался объект. Но иногда клонируемый тип явный и конкретный и заявленной проблемы нет. И например проблема наследования и специфичности типа легко решается, например написав ICloneable<T> where T : struct. Struct может содержать массивы внутри. Тот же например ImmutableArray. Поэтому иногда нужен именно глубокой клон.
> ICloneable is considered a bad API now, since it does not specify whether the result is a deep or a shallow copy. 2. То, что Clone не для всех понимается как глубокая копия, и не гарантирует создание подлинно глубокой копии (т.е. полностью независимого объекта) - так это проблемы реализации и криворукости отдельных людей, а также настройки статических анализаторов. Я например всего его так понимал, что он должен гарантировать создание
3. Да и в общем случае, я думаю у всех иногда возникает необходимость создания глубокой независимой копии объекта, и было бы хорошо, иметь для этого обобщённый интерфейс и какие-то гарантии глубокости.
>>2667674 >1. Тут-то я согласен, что для такого случая и нужно, чтобы возвращался объект. а я не согласен. что нужно клонировать то и делай ICloneable<Foo> и/или ICloneable<Bar> - а не нужно, то и не делай Это уже код работающий с ICloneable<> либо сможет скастовать к нужному типу, либо нет, что как бы штатно. От чистого ICloneable тоже толку не особо, ведь он возвращает object и чтобы работать с клоном нужен каст...так какая разница? а никакой
2 тип копии должен быть "ну чтобы был клон по смыслу, а иначе зачем тогда клон"? Если же оно не может быть склонировано (например мы не можем склонировать Stream чтобы получить такого самостоятельного клона) - так оно и не может быть ICloneable. Все просто и совсем не сердито. Поэтому свой ICloneable<> нормально работает, просто мс опять думает "шарписты дурачки, запутаются, не будем им давать".
А мне потом приходится писать списки вида "мелкософт, ну WTFFFFFFFF"
>>2668525 1. Логическое И пишется с двумя символами &&. Одно & означает побитовое И, вряд ли оно тебе нужно. 2. 5 < a < 10 вычисляется как true < 10 или false < 10 в зависимости от значения a. Что по-твоему больше, true или 10? Вот и шарп не знает. 3. Где фигурные скобки?
>>2668534 1. Разве && от & (как и || от |) отличаются не лишь только тем, что двойные версии операторов & и | присваивают переменной результат проверяя не каждый операнд, а только необходимый? Скажем, если x = false && true, то && сразу присвоит x false, ведь логическое и подразумевает, что оба операнда должны быть true. 2. Резонно. 3. А функция у них есть какая-нибудь, или так принято выделять?
>>2668542 1. Нет, && и || работают так, как ты говоришь, но & и | обходят оба операнда целиком, проверяя каждый бит и складывая всё в результат: 5 | 6 = 0b101 | 0b110 = 0b111 = 7. 3. Принято оборачивать в фигурные скобки любые блоки даже из одной инструкции, чтобы в случае потерянного отступа разраб всё равно прочитал код правильно.
>>2668698 Каких программ? Конкретно что ты пишешь? Программы же разные и соответственно требования к интерфейсу. Вот ты говоришь "любят/не любят" но это бессмысленный пук без указания конкретного применения. Что тебе надо сделать? Если не можешь сказать, значит и не делаешь ничего, только треплешься впустую тупостью как дебил.
>>2668733 Мне правда нужно доказывать что мир идет не туда в плане UX/UI? Кнопка пуск, приложения метро, электрон..мало что ли? Там не требования к интерфейсу рулят - там рулят "а мы хатим вот так сделать". А еще сверху может быть приправлено плоским дизайном и по юзабилити это все ЦЕНЗУРА
И конечно же такие же деятели считают что их поделия нравятся людям. Не потому что ситауция "жричодали", а именно нравятся. Потому что... а он так считает и этого ему хватает.
На той же авалонии проще делать именно новомодный дизайн (ох уж эта дебильная тенденация к новодмодному дизайну (пик))и невозможно сделать похожий на нативный.
>>2668733 да вот пример - стартую визуал студию, а там на старте окно с недавними проектами. Тормозное (зависает в половине случаев, возможно решарпер виноват, я не знаю, я ведь его сразу ставлю и не знаю как без него, но....ммм почему????), убогое - имеем только сортировку по дате запуска (ну ок еще и фильтр по символам, который работает просто невообразимо медленно!!!).
Никакой тебе организации проектов как нужно тебе. В экран влазит очень мало элементов (ну ок можно раскрыть на весь экран ладно) Невозможно выделить несколько и удалить их - удаляй по одному
Зато не забыли подпись "вам нравится окно? ставьте лайк"
Это правда такие требования к UI чтобы такое говно сделать?
мда. капча викторина просто капец л?ша... что это за слово блин
>>2668755 это базовое твой йоба класс по смыслу это 2 чекбокса <CheckBox IsChecked="{Binding Read, Mode=TwoWay}"> <CheckBox IsChecked="{Binding Write, Mode=TwoWay}">
если это один чекбокс где Read читается в чекбокс, а пишется во Write, то это дичь. Читают из геттеров, а пишут через сеттеры.
>>2668765 А если мой класс йоба - это вью модель для элементов TreeView? И тогда CheckBox.IsChecked может/должен быть null, но при этом есть свойства Read и Write как "защита от дурака", чтобы null не сунули.
>>2668773 >Как поьзователь кликом на чекбокс всунет нулл? Если автор вью, увидев во вьюМодели свойство bool?, вдруг поставит IsThreeState=True. Вообще это гипотетическая ситуация, но стало интересно возможно ли как-то забиндить чекбокс на чтение к одному свойству, а на запись - к другому.
Аноны зацените идею а то мне кажется что это гениально, но в реальности ничего не получается.
В общем хочу я сделать облако на блазоре (васм)
А Файлки распихивать по разным серверам (Микросервисы).
Все бы ничего только васм омежка и он не может в корс,он может общаться только с родительским сервером.
Все бы ничего только тогда файл будет загружаться дважды (через прокси) тоесть сначала на контроллера лазор сервера а только потом он сделает реквест на контроллер инстанции файлового облака. Конечно это чушь полная.
Есть возможно заставить васм сделать корс запрос только он сделает это через жопу (Без авторизационных хедеров ) И это тоже не вариант для меня.
Третий вариант это конечно имплементировать облако непосредственно в блазор сервере но это хуйня потому что теряются все фичи микросервиса и к тому же у меня из серверов несколько стареньких насов и ноутбуков. А при таком сценарии их использовать не получится, тут нужно полноценный AIO сервер.
Четвертый Вариант реализовать загрузку потоком, тогда прокси сервер может просто редиректить поток на другой сервер и балансировать нагрузку. только моя упер идея заключалась в том что бы юзать чанки для загрузки даже невьебенно огромных файлов а при таком варианте это будет невозможно.
Анончи подскажи, как же все таки изьебнутся и сделать заебись?
Почему все ругают кресты за сложность работы с памятью, когда там достаточно написать delete object, и всё, объекта нет. В шарпе же приходится рвать жопу, и искать какая мразь ссылается на твою хуйню, и не дает ей спокойно умереть.
>>2669294 это что-то из концепции лайфтаймов, где все живет в рамках какого то лайфтайма. И как раз отлично подходит для любого проекта, где нет явно выраженных скоупов как тот же WPF где время жизни чего либо разное и примитивное управление жизни от DI не подходит
А вот лайфтаймы это мощь. нет утечек, нет проблем с Dispose, нет проблем с отписками - лайфтайм схлопнулся и все автоматически почистилось. Концепт простой как сатиновые трусы (с) - у CancellationTokenSource + Token - та же семантика.
другое дело что WPF фреймворки основаны на концепции слабых ссылок и "GC придет - порядок наведет" и тут уже не так красиво их использовать, ведь та же вьюмодель будет владельцем лайфтайма, а значит нужно ей как то сообщать "ты уже все", а по хорошему вьюмодель сама должна жить в каком то лайфтайме и тогда не забудешь почистить. Когда все принимает лайфтайм, то забыть его невозможно, а значит и забыть очистить граф невозможно.
>>2669061 Че ты там понаписал? Нихуя непонятно. Куда блядь у тебя файл будет загружаться? В обычной микросервисной архиетектуре - у тебя просто клиент шлет запрос на гейтвей, тот проверяет авторизацию, даже не читая тела, если все ок - стримит файлик куда тебе там надо. Какие нахуй корсы? У тебя в контексте микросервисов - все в одном домене крутится, запросы идут через гейтвей, сервисы уже внутри - либо по какому-нибудь rpc либо через шину общаются. Короче. Я вообще не понимаю что ты там такое придумал. При чем там вообще васм и микросервисы.
>>2669261 Двачаю. Было бы неплохо уметь убивать объекты явно. Но домохозяечность высокоуровневость языка исключает вероятность реализации этой фишки - объекта нет, а корни на него все еще будут присутствовать где-то в ран тайме сохраняя "безопасную" ссылку на мертвый объект. И че может случится если такую ссылку разыменовать хуй его знает. Кому-то придется перепроверять все ссылки. Производительность это точно не прибавит.
>>2669458 Гц может почистить. Например, передаешь объект и говоришь, чтобы этот объект не пережил ближайшую уборку мусора. Соответственно вложенные объекты, которые в результате перестанут быть досягаемыми, тоже должны умереть. Граф объектов у ГЦ и так на карандаше - можно за одну уборку очистить память как от виновника торжества так и от всех связанных с ним объектов.
GC.Kill(car1); GC.Collect();
Вот с корнями что делать не понятно. Представь, что ты спустя время, после массы аллокаций, разыменовываешь такой осиротевший корень. И попадаешь вообще хз куда. Что там за объект будет или произвольный кусок объекта. Безопасной и управляемой такую ситуацию не назовешь. Следовательно нужно вводить проверки и кидать эксепшен. Так будет безопасно, однако перспектива словить эксепшен на ровном месте это даже хуже, просто клоунада на ровном месте начнётся. Удаляешь парочку объектов и все, рантайм проклят, поэтому везде трай кетчи, которые ничего полезного не делают, а только страхуют на случай корней с небезопасными ссылками.
>>2669509 Ну. Я сам любитель велосипедить. Но блин. Почему не Channel-то? Вот серьезно. У меня создается впечатление, что про них только я да второй кун из соседнего отдела знаем.
Но если тебе принципиально велосипедить, то можно вот так замутить.
>>2669560 ошибка вообще использовать такую "синхронизацию" ты вон даже специально задержку сделал чтобы "ну на всякий пожарный" но это не сработает. представь 1 ты добавляешь в очередь 1й элемент и запускаешь хендлер для его обработки 2 хендлер живо проходит свой семафор и уходит на 200мс в ожидание 3 хендлер пытается извлечь элемент и в этот момент кто то еще раз вызывает добавление. В итоге у тебя происходит гонка и внутреннее состояние Queue идет лесом.
И вообще никогда не пиши в стиле "что то добавил и последней строкой запустил попутно обработку". Это в принципе будет работать, но лучше разделить добавление и обработку на независимые потоки выполнения.
Методы, в которые переменные передаются по значению, изменяют значение переменных только для локального окружения. Методы, в которые переменные передаются по ссылке (ref ...), изменяют значение переменных для локального и глобального окружения. Функции, в которых заново определяется переменная из глобального окружения, изменяют значение только для локального окружения. Во всём прав? Пик рилейтед.
>>2669819 1 не вижу где бы вообще запускался этот цикл выдирания из очереди. Чей там токен отмены. В каком контексте весь цикл работает. 2 в Enqueue лишний await не нужен 3 а где ConfigureAwait(false). надеешься что не будет контекста синхронизации? 4 (зависит от пункта 1) А когда токен бросит исключение отмены то что будет 5 Что насчет gracefull shutdown есть разница между "все отменяем нахрен" и "больше элементов не будет, но нам важно дождаться обработки тех, что уже в очереди". То есть если как бы не совсем плевать, то делается какой то механизм чтобы кто-то, кому надо, мог дождаться окончания работы очереди - свойство Task Completion например или еще как.
зы: викторина от капчи убивает. вт?ить. это что такое? а свин?я? свинзя что ли ). муж?к внезапно не мужик. сш?ть???
Как лучше сделать в приложухе работаюей с разными внешники железками эмуляцию этих железок что бы можно было легко переключаться для отладки и не засирать код всякими #if макросами? Есть какие нибудь фреймворки для этого?
>>2670190 На таком уровне и сам понимаю, хочу глянуть референс имплементации что бы не изобретать велосипед. Например для обработки всякого рода случайных ошибок есть Polly которую все юзают, может и в моем случае что нибудь подобное есть?
Всем привет. Перекатыаюсь к вам с джавы. Взяли на стажу писать бэкенд. Посоветуйте какие нибудь книжки с последовательным изучением. Знаний в джаве и спринге оч много , поэтому совсем с нуля учиться мне не надо.
>>2670274 Ну поч. ОПП я знаю , SOLID знаю , про архитектуры тож знаю. Если ты про специфические знания о самом языке , то ясен хуй заного учиться буду.
Хм. Хм... Смотрите. Хочу сделать типа доступ к апи по разрешениям. Ну. Базово: Users.Edit, Users.Delete, вы поняли. Собственно. Я чет смотрел, че там у майков и там какая-то непонятная фигня с политиками и прочим. Решил делать велосипед. Сделал. Работает. Но тут я вспомнил, что вообще-то у меня микросервисы. И вот тут - проблемка. Все, от джунов до сеньеров вокруг - считают обычный JWT - говном и вообще. Нужно чтобы был зашифрован. Шарить ключи при этом никто не хочет. Делать уродство в духе: при каждом запросе где нужно разрешение - стучаться к серверу авторизации, чтобы проверить разрешения - уже я не хочу. Собственно. А как умные люди делают-то?
Просто когда я начинал, в голове было такое видение:
//Service A [Permission("User.Add")] public IActionResult AddUser(UserAddRequest r)
//Service B [Permission("Items.Add")] public IActionResult AddItem(ItemAddRequest r)
Но оно разбивается об описанные выше проблемы. Вот если бы было можно выставить перед какой-то сервис, который бы ниче про другие сервисы не знает, просто расшифровывает токен, а потом запихивает куда-нибудь разрешения...
Блин. Пока писал - решил, что это в принципе-то норм вариант. Навесить на гейтвей - расшфировку токена, запихивание в какой-нибудь из хедеров все эти пермишны и дальше - погнали. Но пока это писал - уже понял, что это уязвимость же, типа кто-то прознает и будет сразу вешать эти заголовки в запрос. Хотя конечно можно опять же на гейтвее - чистить их и забивать правильные.
А вообще. Че меня каждый раз смущает. Я вот я беру. И хуячу в обход инфраструктуры всякое. Типа вот есть всякие мидлвары аспнетовские, для всего почти. Там наделали провайдеров, хуяйдеров, фабрик, наследуйся, да расширяй. Но хуй там. Я предпочитаю не разбираться во всей этой залупе - и хуячу сбоку свою хуйню.
Вот типа помню, была таска - типа делать прокси вида: api/proxy?to={route}. Ну и что бы вы думали? Стал я искать готовое решение? Может быть я посмотрел че там есть такое чтобы упросить себе жизнь? Не. Я взял и сделал мидлварем вот это вот. Типа проблему решил. А спать нормально не могу, потому что снится мне в кошмарах, что вдруг я там чет не предусмотрел. Но вроде за 2 года пользованием - никто не жаловался.
Только что делал задачку, для решения которой приходилось изменять лист, а в конце сверять. Map - сам лист. (Я объявил и инициалировал его в самом начале функции, перед if'ами я его поставил для наглядности.) Первый if - тот, в результате которого функция возвращает false (а должна true!), хотя ясно, что я присвоил этой переменной лист и сравниваю её с только что созданным листом. Второй if - тот, который возвращает true. Объясните пожалуйста почему эти if'ы по разному себя ведут. Ссылка на if'ы (пикрил): https://pastebin.com/rbUsQfYm Ссылка на всю функцию: https://pastebin.com/RfMWw4wy
>>2670756 >>2670754 В первом случае ты вручную сверяешь все элементы Во втором сверяешь разные списки, а для них сверяется только равность ссылки но не содержимого.
Хочу децентрализованно раздавать хэш-таблицу, и синхронить её, а оно нихуя не робит. Заебало уже тыкаться. Хочу сделать серверы, в виде модулей, и из модулей этих ебанных - собрать пира, короче. Но чё-то запутался, блядь. Наверное, из-за голого энтузиазма. Бывает.
>>2671417 нет. они ушли в UWP, который забросили, потом в WINUI который тоже забрасывают и типа в MAUI, который забросят не успев туда даже перейти.
в любом случае по винформсу ничего сказать не могу. А в WPF для такой задачи я банально навесил attached property на нужные колонки и достаю их в хендлере и знаю по чем сортировать.
Если я в контроллерах юзаю внедрение зависимостей под копотом создается синглтон этого объекта ? Или каждый раз когда мне нужен этот объект , например в других классах , он создает еще один ?
>>2671506 >>2671484 Я понял что при внедрении своих сервисов их можно создать как синглтон. А как он создает контекст для базы данных через этот метод ?
>>2671831 не использую EF, но судя по прочитанному - он создает контекст при каждом внедрении, то есть дефолтно это transient Поэтому и есть вариант использования пула контекстов
builder.Services.AddDbContextPool
чтобы каждый раз контекст не создавать.
А вообще если видишь чужой Services.Add* то переходишь и смотришь исходник и там видно у кого какой лайфтайм, благо в DI от майков их 3 стандартных.
>>2671838 Да , я тоже так подумал. Потому что создал не пустой контсруктор и он отрабатывал каждый раз при переходе по урл, судя по логам. Почему EF не юзаешь ? Какие еще аналоги есть ?
>>2671841 Потому что не хочу. Супер тяжелый при старте, а также дополнитнльная прослойка которой нужно разбираться как пояснить чтобы он не нагенерил херь в sql
>>2672091 Я нет. Я полиглот. В первую очередь из-за того что не пытаюсь использовать один язык везде, а признаю что каждый язык силен в чем то и мне лучше знать его чем страдать золотым молотком. Потому любые фичи что повышают выразительную мощь и позволяют сделать проще я всячески приветствую.
>>2672091 >А ты не боишься Нет. Я же не джавист какой-нибудь, для которого добавление одного модификатора доступа - это уже пиздец и breaking changes.
Я за 5 лет примерно вот такую цепочку прошел: .NetFramework 3.5 .NetFramework 4.7 .Net Core 2.0 .Net Core 3.1 .Net Core 6.0 Это не считая всяких минорных версий, .Net Standart и версий разных библиотек. И как-то норм, нет там таких изменений, чтобы занимало бы больше недели на изучение.
>>2670805 Знаешь почему никто даже не попытался ответить? Потому что почитай стайл гайды.
При одном только открытии репы хочется закрыть т.к. стена файлов и никакой структуры. Открываю рандомный файл а там такой же пиздец. Стойкое ощущение что по тебе дурка плачет
>>2672674 Так там же есть целая ебическая структура, из кучи разных серверов, и клиентов. Глянь бранчи, штоле, и как они переплетены. Я их хочу как модули сделать. Потому и куча файлов.
Там структура такая: TcpServer - один сервер TCP TcpServer -> TcpServers - много серверов на разных айпи и портах TcpClient -> TcpClients - много клиентов TcpServers + TcpClients -> TcpClientsServers - TCP серверы и клиенты - в одном приложении
UdpServer - один сервер UDP UdpServer -> UdpServers - много их UdpClient -> UdpClients - много клиентов UdpServers + UdpClients -> UdpClientsServers - клиенты и серверы UDP в одном приложении
То же что и UDP, но с мультикастом, чтобы искать пиров в локальной сети, и коннектится к ним: UdpMulticastServer UdpMulticastServer -> UdpMulticastServers UdpMulticastClient -> UdpMulticastClients UdpMulticastServers + UdpMulticastClients -> UdpMulticastClientsServers - клиент-сервер (много их).
Та же хуйня, только тут UDP и TCP серверы - работают на общем порту, но отвечают по-разному на разные пакеты: TcpServers + UdpMulticastServers -> TCPUDPMulticastServers TcpClients + UdpMulticastClients -> TCPUDPMulticastClients TCPUDPMulticastServers + TCPUDPMulticastClients -> TCPUDPMulticastClientsServers - это уже пир, как-бы.
Ну а дальше уже, шла разработка пира, только как-то кривовато, и он не пашет нихуя.
>>2672684 Шиза. Уже за csc в скрипте запуска и mono в цивилизованном обществе даже руку не пожмут. А плодить ветки с абсолютно разным кодом это отедльный вид извращенства
>>2672687 >Шиза. Уже за csc в скрипте запуска и mono в цивилизованном обществе даже руку не пожмут. А как это говно ещё запускать, если не с под командной строки? Даблкликом по екзешнику, штоле?
>А плодить ветки с абсолютно разным кодом это отдельный вид извращенства А что предлагаешь, кучу репозитариев для каждого сервера заебенькать? Хотелось бы чтобы это были отдельные модули, как-бы. Но я особо не силён в модульном программировани, поэтому так.
>>2672688 >И ты так и не пояснил как должны простые смертные читать подобную жесть? Надо стать бессмертным, как я - очевидно же. Шо там непонятного-то? Первый метод - возвращает строчку. Второй метод - байты. Это - ответ на запрос. Ну а третий метод - возвращает TcpClient, тогда, когда подключение есть. Если его нет, то возвращает хуй, какбэ. А уже имея TcpClient, подключенный к серверу, можно юзая его - слать запросы на этот вот сервер, слать их циклом, и не отключаясь.
>>2672714 Скажи просто честно, ты хоть что то читал по сборке в дотнете? А про оформление кода и нэйминг?
У тебя ни один стайл гайд не соблюдён. csc никто напрямую не дёргает, все идут прямым путём через мсбилд который и то вызывается через dotnet xxx и потом с готовыми собранными бинарями делают что хотят и где хотят. Моно это привет из 2010
Я честно хуй вообще что сказать, это всё выглядит на столько плохо и неудобно что вообще не понимаю как с этим работать. Как ты это нечто в дебаг режим загоняешь?
Что лучше: поставить виртуалку с линупсом и в нём гонять докер или подрубить WSL в самой винде и гонять докер через него? Первый вариант мне нравится, что виртуалка сама по себе контейнер и можно настраивать там окружение: свой дотнет, свои инструменты, но минусы что вижлу на линукс не поставишь и надо работать с вс кодом. Второй вариант удобен, что работаешь с вижлой, но сам WSL какой-то костыль, который перманентно отжирает у тебя ОЗУ. Если виртуалку можно выключить, то WSL можно только деинсталировать с потерей всех данных.
>>2672758 > WSL какой-то костыль, который перманентно отжирает у тебя ОЗУ Если всл1 то он ничего не отжирает, но раз ты про докер то всл2. И внезапно но всл2 просто виртуалка глубоко интегрированная в винду которую можно прибить
>>2672721 >Скажи просто честно, ты хоть что то читал по сборке в дотнете? >А про оформление кода и нэйминг? Ниет. Я же не кодер-шарпист, мне за погромирование не плотят, я на голом энтузиазме пира костылю, чтобы в нанобороду прикрутить его. Просто в гугле пишу "как сделать хуйнюнейм CSharp", вижу вылазит говнокод всякий, перевариваю эту хуету всю в мозгу, потом открываю NotePad++ в WindowsXP и короче пишу говнокод туда. Потом значит сохраняю его как cs-файл, ну и создаю .bat-файл чтобы откомпилить и протестить. Если что-то выёбывается там, приходится врубать фиксиков, смотреть как они фиксят и короче фиксить, всю эту еботу. Ну а в линупсах шоб робило - так через mono, .sh файлом конпелирую, и там уже пердолюсь, какбэ.
>У тебя ни один стайл гайд не соблюдён. А как их блюсти?
>csc никто напрямую не дёргает, >все идут прямым путём через мсбилд который >и то вызывается через dotnet xxx >и потом с готовыми собранными бинарями делают что хотят и где хотят. Ну вот, я так и думал, как-то, в бинари всё заделать, чтобы оно как модули было, а потом из модулей этих собрать пира и ебись оно конём. Но я до такого уровня, какбы - врядли дойду. Нутыпонел.
>Я честно хуй вообще что сказать, это всё выглядит на столько плохо и неудобно что вообще не понимаю как с этим работать. А зачем работать? Надо написать заебато, чтобы уже не трогать это говно, и чтобы оно работало, а не над ним чтоб работать.
>Как ты это нечто в дебаг режим загоняешь? Просто пишу Console.WriteLine где надо, чтоб в консоли лезла инфа, а когда не надо - закомментировал и нету его.
Ну, чё сказать.. Вроде как пофиксил уже этого ебучего пира. Поплыло говно по трубам: https://github.com/username1565/CSharpServers/network Вот тут короче видно. Вроде робит, но всё-равно надо фиксить всю хуйню, и тестить, а ещё позакомментить всякое, а то многабукафф лишних вылазит.
>>2672714 >Шо там непонятного-то? >Первый метод - возвращает строчку. Второй метод - байты. Это - ответ на запрос. >Ну а третий метод - возвращает TcpClient, тогда, когда подключение есть. Если его нет, то возвращает хуй, какбэ
>>2672836 Чел, ты охуенен. Даже представить боюсь через что ты прошел, чтобы у тебя все это вот так получилось. Местные домохозяйки привыкли что за них все делает студия и компилятор, а тебе и так норм, вот они и бесятся, тимлиды хуевы. Скатили тред в перманентное интервью на собесе. Так что не слушай долбоебов, ты очень крут.
>>2672884 суть в том что код должен быть читабелен. Если одному норм - то только одному этот код и нужен. И то только пока он его пишет ибо через год все забудется и он сам ахереет от этой неотформатированной лапши без структуры
>>2672884 Согласен. Послушал его мысли, посмотрел его работу и много нового для себя извлёк. Как минимум буду теперь делить части проекта по веткам гита, а не директориям!
>>2671479 Хм. Вот тебе картинка как примерно оно работает.
А про твой вопрос. Контекст БД, по умолчанию - Scoped. Т.е. на каждый скоуп создается один экземпляр, который шарится между теми кому эта зависимость нужна.
>>2672984 Там короче надо в переменные где-то записать путь до папки из которой будет запускаться. Так почему-то на некоторых дистрибутивах. Вот конкретно с маджарой - сам ебался. Уже забыл че делал конкретно и куда прописывал. Проверить что оно работает - можешь просто открыва ~/.dotnet и посмотрев что оно установилось, можешь еще и запустить сам dotnet и увидеть вывод с помощью. Но чтобы оно глобально работало - надо где-то прописать путь до dotnet'а, а где - уже не помню.
Анончики подскажите, а как мне изменить язык интерфейса в самом установщике Visual Studio Installer, а то у меня сама студия на английском, а эта хрень на русском, хочу чтобы менюшка, описание пакетов нагрузок то же были на английском.
>>2673357 Запускаешь cmd Переходишь в каталог: c:\Program Files (x86)\Microsoft Visual Studio\Installer\ (ну или туда где у тебя установлен инсталлер студии) Вводишь команду: vs_installer.exe --locale en-US
После этого инсталлер запустится на английском. И при последующих запусках так же будет на английском.
>>2672884 Похвально. Теперь бы sqlite прихуярить туда как-то, чтобы база данных могла быть пиздатой. У меня есть репа с сиквелайтом тут https://github.com/username1565/KeyValue И недопиленный бранч с сиквелайтом в наноборде - вот тут: https://github.com/username1565/nanoboard/tree/nanodb-sqlite Короче, базу вообще переделать бы в виде хэш-таблицы, и тогда уже можно было бы её раздавать в пиринговой сети, децентрализованно. Даже в локальной сети, можно было бы просинхронить базу. К тому же, если использовать sqlite, то можно вообще убрать нафиг ограничение на аттачи, и blob'ами их заливать туда (с каптчёй, разумеется). Каптча встроенная, что заебато. Это всё пока лишь на уровне идеи, и очень много пердолинга. Но, пожалуй - закину всё это в todo, для потомков. А вам бобра, шарпаны.
>>2672884 >привыкли что за них все делает студия и компилятор Я до того как перекатился в .net, лет 15 писал на разных экзотических языках у которых не было ни нормальных сред разработки, ни инструментов, ни прочего. Точно так же приходилось писать код в текстовых редакторах, делать разные батники для запуска компиляции, отладку через печать в консоль, для некоторых даже самому трансляторы приходилось писать и прочие велосипеды изобретать. Я это к чему. Ебал я в рот возвращаться ко всему этому пердолингу. После перехода на шарп я только и делаю, что кайфую от того что мне не нужно заниматься всей этой херней. Можно просто сосредоточиться на конкретной задаче и писать код на полном расслабоне.
>>2673477 Тут дело не в майках, а в линуксе как таковом. Я думаю им нахуй не уперлось поддерживать свои продукты на всем пингвинячьем зоопарке. Они базу сделали, а в остальном ебитесь сами, хотели опенсорс - берите сколько унесете. Собственно как и со многими другими производителями софта.
Анон, который посоветовал мне либу Jetbrains.Lifetimes, спасибо тебе огромное. Это просто лютейшая годнота, благодаря которой я избавился от утечек памяти и здорово облегчил себе жизнь.
>>2674692 вещь конечно годная, но если использовать ее на полную катушку. Я использую в основном в WPF - там у меня все на его основе построено, а сам он поверх DI от мелких.
>>2674889 А что GC GC чистит только то что осталось без ссылок. Но занулить ссылки легко забыть или неудобно. А еще и не тот порядок диспоза. Лайфтаймы все это решают
>>2674870 Я устраивался в 2020м После меня еще чел приходил, тоже без каких-то знаний. Другое дело, что это от места зависит и готовности за 40к работать на начальном этапе.
>>2674975 >Но могу ли я Можешь. Статические члены класса доступны для членов экземпляров класса. Обратно нет.
А вот насчет >Хорошая ли это практика? для начала нужно понять, что ты имеешь в виду под: >относительно тяжелый метод >ретранслирует данные из статического метода
Судя по формулировкам ты не до конца понимаешь, что такое статика в шарпе и зачем она нужна.
>>2674987 В моем понимании код обычного метода будет дублироваться при каждом новом экземпляре. И если будет 100 экземпляров, то будет 100 копий метода. Если внутри экземпляра еще и 100 методов, то это (в моем понимании) влияет на объем памяти, если я захочу составить большой список.
Статический метод будет существовать в единственном экземпляре. Поэтому я делаю метод статическим, который принимает экземпляр собственного класса и обрабатывает его. (пикрил)
>относительно тяжелый метод Тут я имел ввиду количество строк кода. Я понимаю, что при конвертации в IL-код строка строке рознь..
>>2674993 метод существует в таблице методов в размере одна штука а при выполнении используется память из стека текущего потока так что статический метод ничего не выигрывает в плане памяти.
>>2674994 Спасибо, я думал что методы дублируются.
>>2674980 Допустим я создал экземпляр класса Bike, и экземпляр класса Car. В их свойствах лежит один и тот же экземпляр класса Gas.
Вот я удаляю Bike, но экземпляр Gas определенно продолжает существовать в Car. Получается, что у Bike не будет почищен GC, ведь в его свойстве лежит ссылка на Gas. Так?
>>2674975 >>2674993 Ряяяяяяяяяяяя. У меня горит. Ряяяяяяяяяяяя. Вот чтобы такой хуйни не было - и надо с си начинать. А в идеале - с ассемблера. А почему говрит? Потому что я такую хуйню уже от работающих слышал, когда они поясняли, зачему все хуячат статикой. Пиздец. Ряяяяяяяяяяяяя. Гороит.
>>2675089 А почему тогда DependencyProperty использует статический метод OnPropertyChanged? У него же есть экземпляр класса, почему бы не вызвать метод напрямую?
>>2675795 >Какова хуя я не могу привести список типа Booba к списку интерфейса ITitties? Потому что дженерики, ковариантность и еще дохуя умных слов, которые ты все равно не поймешь. Короче делай так как на пике и будет тебе счастье.
>>2675945 Выглядит как бред. Я что, должен создавать НОВЫЙ экземпляр массива? Не слишком ли жирно? И в чем смысл интерфейсов?
А если у меня есть несколько списков разных типов, но я хочу сделать универсальный метод для них, внутри которого нужно просто получить индекс итема списка, то как быть тогда? Я же не могу сотни раз туда-сюда создавать новые списки?
>>2675987 >Выглядит как бред Как бред тут выглядишь только ты. Тебе же сказали, что у тебя лист дженериковый. Ты по сути пытаешься на лету у него обобщеный параметр поменять. Так это не работает. Ты можешь тип самого списка привести например к Inumerable<Booba> или Ilist<Booba>. Если же ты хочешь приведение для элементов сделать, то и делай его именно для элементов (по отдельности, перебором или через ToList<ITitties>) >>2675987 >Я что, должен создавать НОВЫЙ экземпляр массива? Либо так, либо сразу создавай список того типа который тебе нужен.
>>2676264 Та банально. 1. Он может скастить все к обжект. Вообще 0 проблем. 2. Он может делать обертку виде {type; any} и таким образом мы бы могли делать что-то в духе list[index].As<T>(); 3. Можно проиграть по памяти но так же хранить че угодно: 2 массива под капотом - один с оффсетом до элемента с индексом, второй - любой элемент. Доступ к элементу получается в 2 шага, но все еще оч быстро.
Это первое что приходит в голову за 2 минуты. Другое дело, что List<T> - делался чтобы быть пиздец быстрым и экономным. Если надо что угодно пихать, есть ArrayList
>>2676562 >Он может >Он может >Можно проиграть Он то может быть и может, только не хочет. А хочет он чтобы можно было как в каком-нибудь js - скормить языку любое дерьмо и чтобы он сам разбирал и угадывал, что там "разраб" подразумевал и хотел. Но пацанчик не в тот район забрел, у нас сильная типизация и таких тут не любят.
>>2676264 >Я даже в теории не понимаю как это должен переваривать рантайм Элементарно. Как и всегда. Ты просто кретин и не понимаешь, что в списке хранятся не объекты, а указатели, которые все одинаковые, хоть на что указывай, похуй вообще. И даже если кроме указателей хранится еще мета-информация наподобие идентификатора типа, это тоже для всех объектов имеет одинаковый размер. В списке всегда хранится одинаковые стандартная информация, которую можно спокойно кастить во что угодно, во что захочешь, в то и касти. Если в реальности шарп не дает такую возможность, значит его писали говношлепы тупые кривожопые макаки. Технически нет никаких проблем кастить содержимое списка во что угодно, ибо он и так работает с одинаковыми данными.
>>2676715 А кто дает? Даже жава с его стираниями типов вольностей не позволяет и будет тебе ошибка. Котлин еще строже. А все потому что без этого нельзя гарантировать безопасность всех сценариев.
Шарп так бузит на список ибо у него чтение и запись T. А сидеть можно только на одном стуле (in T или out t). Потому Ilist вредничает, а вот IReadOnlyList только чтение и потому ковариантен
Конечно на уровне IL ты "царь во дворца" но это уже и не шарп
Ты высказался что шарп написан макаками. Еще собеседника кретином обозвал Я же показал что эти правила не только в шарпе и имеют причины их иметь, а не потому что "макаки ниасилили".
Помимо компилятора рантайм тоже должен давать некотрые гарантии безопасности (та же жава внезапно дает даже во время исполнения хотя как бы type erasure),
Вот шарписты постоянно хвастаются async-await, а я вот смотрю на эту конструкцию и вообще не понимаю как она работает. Вот в голанге просто пишешь перед вызовом функции go и она запускается как горутина. Ни каких особых условий на саму функцию не накладывается. А тут прям какие-то монструозные, малопонятные конструкции и миллион ограничений.
async - позволяет использовать await внутри метода и создаёт стейт машину между await'ами внутри метода await - проверяет, завершился ли метод, если да сразу возвращает результат и управление вызывающему коду, иначе меняет стейт и выполняется асинхронно и все такое
>>2677050 Ограничения в основном из-за выполнения таски потоком из пула.
Типа проблемности отлова исключения в async void, так как эксепшон заворачивается в Task. Из войда полетит в текущий контекст синхронизации и ловить их надо прям в этом методе.
Return в using, из-за возможности ГЦшки потереть нахуй все ещё до обращения к результату.
Отмена таски происходит эксепшоном(ну спасибо, нахуй, разрабы)
>>2677050 Потому что асинк-эвейт и раскраска функций - это антипаттерн. В сихэштеге естественно выбрали вариант сделать через жопу. В джаве поступили гораздо умнее и добавили интуитивно понятные виртуальные треды, которые прекрасно встраиваются в язык и ничего не ломают.
>>2677146 как раз в шарпе примитив - ввели абстракцию таски которую можно запустить и дождаться. В общем то эта та самая корутина. В шарпе просто упор на абстракцию "запустить и получить объект ожидания", а "где выполняется, как выполняется, выполняется ли вообще" это уже детали реализации.
Исторически сложилось, что в шарпе сначала ввели концепцию "все можно представить как таски", а уже потом к этой концепции добавили сахар await
Таким образом ты получаешь простой и унифицированный подход - "тебе выдали (Future/Defered/Promise в других языках) и ты можешь либо соединить в цепочки вида ContinueWith (then) либо заюзать сахар await "
То же самое в питоне, в жаваскрипте...это обобщенный унифицированный подход позволяющий работать с абстракцией, а не с деталями.
взять, к примеру, котлин - там suspend методы и когда их пишешь то нет никакого await и выглядит линейно....до тех пор пока тебе не понадобится запустить 2+ параллельно и получить результаты и бац - опять тот же await (зато попутно там дичь с исключениями вместо унифицированного единого подхода)
я го не знаю. но если я правильно понимаю ридми по go то в шарпе это экивалент Task.Run ("запусти и забудь"). ключевого слова для этого не делали (вообще мелкие очень очень очень скупые на ключевые слова (привет ConfigureAwai(false)), но суть та же.
получается не так красиво из за await но унифицировано!. Я могу работать со всем в одном стиле. Я могу обернуть в таски любые другие подходы и связать одно с другим. Например я могу спокойно превратить event в таску и связывать с другими тасками. Я могу добавить TaskCompletionSource куда то и работать с ним так же унифицировано как с таской. Все есть таска. В других языках же мне придется явно "ага, тут нам нужен результат и значит нужен объект типа Defered и как то его дождаться же и вклинить его в мой код. И вот тут начинается "зона особых правил", которой в шарпе нет - там все работает единым подходом.
>>2677146 почитал по диагонали. горутины легковесные по своей природе. но по той же природе не могут возвращать результат. И если нужно его вернуть и чтобы было "по красоте", то приходится городить огород.
еще тут товарищ хвалит типа виртуальные треды в жаве. Не знаю про них (и знать не хочу ибо котлин) но...что тут сказать..."и 20 лет не прошло". Хотя ой - прошло. Когда там в шарпе await появился?!
У каждого подхода свои достоинства и недостатки. Шарп все же язык общего профиля, а го по рождению заточен под задачу - работает быстрее, но писать что то большое....ну нах.
>>2677146 Так а что сложного в async-await в шарпе? Реально же интересно, че там сложного. Типа промисы из JS - не сложно, а вот шарповские Task - сложно пиздец? Чи шо? Или просто, это чтобы у тебя было в духе: SomeMethod(callback => { Console.WriteLine("Complete"); }) ? А рутину свою в фоне, как на тредпуле, так и без - изи можно самому сделать. Правда придется делать свой тип и там Wait метод, если надо дождаться результата, но никто не мешает. Деды так делали, пока TPL не завоевал шарповский мир.
>>2677125 Он про канцелейшен токен, вероятно. Ну и многие асинхрннгые функции работаю с этим токеном, поэтому в большинстве случаев отмена авейта приведет к исключению. И это засрет твой лог, хотя отмена в штатном режиме.
Как сделать так, чтобы при обращении к классу Account напрямую, я получал свойства с типом Data, но если я обращаюсь через интерфейс IAccount, то получал свойства с типом IData? (пикрил 1)
Мне не дает реализовать интерфейс с конкретным типом Data.
>>2677758 А как иначе в языках основанных на исключениях? Как еще прервать поток выполнения и гарантировать что никто выше не подумает что все завершилось штатно (на деле оно было отменено)?
Либо исключения, либо плоди Result<Error> (коды отмены). Третьего не дано. Выбор очевиден. Исключение отмены вполне вписывается в парадигму "поток выполнения не пошел по задуманному и был прерван". И "отмена в штатном режиме" все равно означает "выполнение не пошло штатно"
Так что это из разряда спора "коды отмены против исключений".
не хочется исключения - забудь про await и работай с сырыми объектами тасок (Defered)
в шарпе, питоне, котлине и уверен в любом языке, где во главе угла стоят исключения - используется свой вариант CancelledException
>>2649578 (OP) Как же я рад, что не перевел проекты на шарп. Звоночек с кидком линуксовского гуя был тогда к месту. Смотрю вот 7 версию, а они уже выпилили поддержку win 7.
>>2677896 ну так то не самая большая проблема (хоть и неприятно) мало кому нужно делать продукт что должен работать на вин 7 Тем более что дотнет 4.8 никуда не делся и даже если бы он обновлялся, то не на вин 7
Почему я не могу привести ObservableCollection<Zalupa> к IList<IZalupa> или ICollection<IZalupa>, если Zalupa совершенно точно реализует интерфейс IZalupa?
При этом привести к IEnumerable<IZalupa> получается. И что вписывать в интерфейс, чтобы можно было редактировать итемы?
>>2677908 >мало кому нужно делать продукт что должен работать на вин 7 Ну да, все первого января перешли на десятку же. Не нужно с мировозрением вебмакаки что-то рассуждать.
>>2677924 причем тут макака . ожидать что те кто перестали поддерживать вин 7 даже платно (исключая ембедед который тоже скоро все) продолжат его поддерживать в других продуктах...особенно если их основной посыл всех именно пересадить на новую версию винды....
понятно что не все перешли, но таков уж мир легаси - сидишь на древнем, так забудь про новое. дотнет 4.8 там по прежнему работает (и на него апдейты даже прилетают)
кстати питон, который язык самого широкого профиля, тоже дропнул вин 7
>>2677939 >сидишь на древнем, так забудь про новое. Ща всем клиентам напишу это, а то хера они такие додики не бегут покупать десяточку, сейчас вот только они драва сами на десятку напишут. Я тебе говорю, сиди в вебмакинге и не парся, к тебе с EEE позже придут.
>дотнет 4.8 А что пора слазить с кроссплатформы? Посидели и хватит?
>>2677939 >кстати питон, который язык самого широкого профиля, тоже дропнул вин 7 Как раз скрипты как софт никто не распространяет, там вообще если углубиться в бинарную зависимость окажется все плохо на вин.
>>2677948 А че? Тебе нужна кроссплатформа или легаси ось и дрова и вообще кровавый энтерпрайз где никто никуда не переедет Ты уж определись
>>2677953 Еще как распространяют. Просто ПОПУТНО могут притащить и свой питон и вынуждены писать под него не переходя на более новый Но в общем то тут никакого отличия от твоей ситуации
>>2677956 >Еще как распространяют. Просто ПОПУТНО могут притащить и свой питон Установка однокласснику питона, чтобы твоя лаба запустилась, это не совсем коммерческое распространение софта.
>>2677964 4 месяца статуса "вообще забыть нужно" а легаси это "больше не рекомендуется использовать, вот вам новое". И этому никак не 4 месяца.
>>2677967 Какая еще установка. Ну да, есть распространение через pypi, но обычно софт упаковывается в ехешник пиинсталлером или py2exe и прочим подобным. И там внутри помимо твоей проги и дистр питона.
В бейсике, я под каждый реализуемый метод или свойство интерфейса, должен явно пометить соответствующий заголовок. К примеру: Property ZalupaKonya As Zalupa Implements IZalupy.ZalupaKonya
Поэтому название свойства может не совпадать с названием свойства интерфейса. Property QWERTY As Zalupa Implements IZalupy.ZalupaKonya
А как с этим в шарпе? Как детектируется нужное свойство? По имени?
>>2677973 >но обычно софт упаковывается в ехешник пиинсталлером или py2exe и прочим подобным Стой, подожди, ты только сказал ставят свой питон. Ты реально сейчас загуглил и пытаешься показаться умнее?
>>2677975 дичь какая то в бейсике тогда конечно по имени ведь интерфейс как бы и задает именование которое должно быть реализовано. Давать возможность менять имя - стрелять себе по ногам. Если же конфликт имен есть, то есть явная реализация интерфейса
>>2677995 >п-п-притащить свой питон это не с-с-ставить! Слышишь!? да. притащить не значит ставить даже дотнет позволяет упаковать свое приложение в один ехешник вместе с рантаймом дотнета и запускать его на системе без дотнета
>>2677983 В теории это мне позволило конкретизировать свойство, если я обращаюсь напрямую к классу, но при этом у меня есть обобщенность в виде интерфейса. Мне кажется это плюсом.
>>2678010 ну ок.принимается. это сахар для экономии кода. в шарпе решили не сахарить. шарп очень жадный на сахар. Это по сравнению разве что с жавой он сахарный.
>>2677896 Так а какую альтернативу ты предложишь в случае заводов, допустим, где с самого начала либо C# либо C++ CLI, и за 20 лет столько кода написано, что просто ебнешься переводить на что-то открытое. Проще таки обновить винду и допилить софт под новый стандарт.
Вот, к примеру два класса (пикрил 1). Оба имеют одинаковую сигнатуру, только разные типы. Существует ли какой-то вариант, чтобы вот это все привязать к единому интерфейсу? Дженерики не помогут.
Я голову сломал, у меня нифига не получается. Суть в том, что у меня есть универсальная команда переименования выбранных итемов. Я должен запустить метод Execute, который "удалит выбранное" экземпляра той вьюмодели, которая хранится в свойстве команды.
Проблема передать вьюмодель в свойство. Допустим я делаю дженерик класс ViewModel<Document> и ViewModel<Page>
Если я захочу передать в свойство, которое выглядит так public ViewModel<INode>? CurrentViewModel { get; set; } То я получу ошибку. Я не могу менять тип.
Интерфейс я не смогу использовать, потому что нет подходящего интерфейса для ObservableCollection, позволяющего редактировать коллекцию.
>>2678182 Блин. Я в последнее время гляжу на код, который генерирует моя башка и думаю, вот на кой хуй я сам-то на шарпе кодю, если постоянно пытаюсь его наебать? Пиздец меня это вымораживает. Все ебучий опыт ЖС с его гибкостью и удобством. Хочу бладь на ЖС писать бекенд.
Как хранить последовательность действий? Вот есть паттерн команда, и я вижу джва варианта: отдельный класс, в котором будет храниться список команд в нужно последовательности, либо же каждая команда будет содержать в себе ссылку на предыдущую, образуя таким образом односвязный список. Что выбрать?
>>2678208 Делай как завещали нормальные люди: Каждое следующее состояние - это информация об изменении предыдущего. Ну. Т.е. примерно так:
StateA - твое начальное состояние StateB = StateA + Midificator1 StateC = StateB + Modificator2 Все просто. Всегда можно повторить. Можно двигаться в любом направлении, как вперед так и назад.
>>2678182 Блин, идея указывать два дженерик типа мне тоже приходила в голову, но мне показалось это слишком грязным. Ну раз мысли сходятся, то придется юзать это. Спасибо, за уделенное время :3
Почему SharpDeveloper больше не развивается? Последний апдейт в 2016 вышел. Насколько знаю, на маках именно его взяли за основу VS for mac https://www.youtube.com/watch?v=xk4Y7z_8vbU
>>2678208 >Как хранить последовательность действий? Ты имеешь ввиду историю действий? Я хранил в стэке - списке, который при получении итема его автоматом удаляет. Собственно было два таких стека - один Undo, другой Redo. При команде Undo я извлекал последний итем списка Undo и помещал в список Redo. И наоборот.
Сами итемы ничего не знают от предыдущих или последующих действиях. У тебя все должно восстанавливаться само собой, но для этого твои команды не должны производить сложные неотслеживаемые действия.
К примеру мне нужно сгруппировать объекты — это по сути три мелких команды: создать папку, переименовать папку, переместить итемы в папку. Соответственно что бы я не отменял, у меня будут ровно те условия, которые мне нужны на текущем этапе. Не будет такого, что папка внезапно будет с другим именем или она отсутствует.
>>2678242 Ты имеешь ввиду, что условные методы DeleteItems, RenameItems, MoveItems находились бы прям во вьюмодели? Чет слишком тяжело даже по меркам вьюмодели. Я щас раскидал по командам в отдельных классах и у меня все равно все засрано.
Помогите мне. Пожалуйста. Вопрос не про шарп, а про моделирование объектиков.
В общем. Есть ряд устройств. Тысячи их. Я хочу ПО, которое бы собирало со всех этих устройств нужное мне. Мне, как пользователю - не интересно, что тут модбас-снмп-или MQTT, мне интересно, условно влажность воздуха, включена лампочка чи нет, ну и температура, допустим.
Ну так вот. Какие я вижу способы абстрагироваться от желеязки. Я выделяю такие вот сущности: Data - ДАННЫЕ, которые нужны пользователю. DataChannel - абстракция, которая должна как-бы для приложения символизировать поток данных, который идет от устройства уже в виде который пользователю нужен Channel - абстракция, которая содержит в себе уже более близкую информацию к устройству: тип данных, формула для приведения и т.д. CommunicationLine - тута мя прчем уже специфичные для протокола данные: номера регистров, как мы их соотносим с данными Device - абстракция над устройством, получает драйвер, устанавливает соединение, держит его, если надо, периодически дергает из CommunicationLine сущности, и отдает их ей, чтобы вверх пошло Ну и где-то снизу - DataCollectorEngine, который читает конфигурацию, строит всю эту модель и начинает опрашивать устройства в зависимости от настроек.
Ну так вот. Это должно работать.
Но у меня возникает вот какая проблема. Смотрите. Есть большой список устройств, в которых протоколы задумывались дохуя эффективными, в духе: открыть соединение и серануть сразу большой запрос, чтобы большой ответ получить одним запросом. Ну дык в этом и проблема. Если мы делаем как я выше описал, наш движок - должен думать в контексте Data и посылать вниз запросы, которые распарсятся к конкретному протоколу из конфигурации и потом устройству улетят. Но это пиздец неэффективно для того же SNMP, где я могу разом считать дохуя всего одним Bulk-запросом. С другой стороны - так проще и так добавление поддержки нового устройства будет заключаться просто в написании dll которая все что надо умеет. Пара DeviceImpl и DeviceDriverImpl и все, кайфуем.
В общем. Рассудите меня. Как быть? Что делать? Может быть какие-то лучшие решения или вообще, моя модель - хуйня и я вообще долбоеб?
Хочу вкатиться на фулстак или на крайний на бэкенд сишарповский. Так вот вопрос, везде где сишарп используется ангулар на фронте? А то я учил реакт на фронте. С реактом пошлют нах? Стоит ли дрочить ангулар или потратить это время лучше на изучение сишарпа?
>>2678392 > Хочу вкатиться на фулстак Нахуя? Чтобы работать в 2 раза больше а получать столько же?
А по остальному посту. Коротко. Че конкретно где используется - зависит от того, че в свое время бизнесу продали те разрабы, что были там в тот момент. Кто-то продал веб-формы и они столько лет работали, их не трогает никто. Кто-то продал MVC - оно работает, потихоньку пилят. Кто-то продал блазор.
Подытожив. Фуллстек - это неабка. Причем проигрывают все. Бизнес думает, что сэкономил - наняв как-бы 2 человек по цене одного, а получает хуйлушу, который ни там ни тут нормально не разбирается. Ты, чтобы все успевать - занимаешься скоростным копипастом, не имея возможности даже нормально разобраться. В итоге - задачи валятся, через 4 года ты только-только будешь подходить по знаниям к мидлу что с одной, что с другой стороны. Так что не страдай хуйней. Попробуй то, попробуй это. Че больше нравится - то и начинай качать. Иначе - проебешь время, силы, деньги. Оно тебе надо? Не надо.
>>2678396 Я понял твою мысль и в общем-то согласен. Я немного сумбурно выразился, попробую поточнее. Я в целом готов пойти как на фронта так и на бэка. Фронт я более менее подучил. Бэк знаю слабо. Буду ближайшее время искать работу фронтом. Но уже заранее готовлюсь к тому что у меня это может не получиться учитывая популярность фронта и большую армию джунов и вкатышей. Поэтому хочу еще бэк подучить чтобы были еще варианты. Сишарп понравился. Посмотрел вакансии там берут джунов фулстеков в моем городе. Вот я и подумал что буду откликать по отдельности на бэк или фронт но если выбирать не приходится и предложат фулстаков или это как-то увеличит мои шансы на поиски работы фронта и бэка по отдельности то я бы хотел использовать эту возможность
Есть приложение, на шарпе. Оно - tcpшный сервер, не важно для каких целей. Когда все начиналось - сразу было требование, к этому серверу сделать веб-морду в виде SPA-приложения.
Собственно сказано-сделано, я просто не долго думая, начал все с WebApi-проекта, в нем папочка TcpServer. Не суть. На картинке приложенной - приблизительная структура того как было сделано(ессно это пример, в реальности чуть по другому, но на память накидал структуру) Суть в другом. Внезапно появилось требование, чтобы веб-морда была опциональной, а сервер был лололо демоном, и вообще их нужно теперь много разом запускать на разных машинах, а управлять из одной веб морды.
И вот тут-то я чет кхм. Дааааа. Просто из-за того что изначально это не задумывалось - для простоты - сразу в контроллере дергали че надо от сервера. Теперь вот.
Вопрос вот в чем. Сколько приблизительно должен занять рефакторинг этого дела? Просто когда я думаю об этом - мне кажется, что не меньше года, тем более что в одно рыло же пилил. С другой стороны - я старался чтобы не так связно было. Код из контроллеров - можно в какой-то класс вынести, типа TcpServerFacade. Но с требованием с одной мордой сразу за несколькими серверами следить, кажется, что правильнее будет придумать свой протокол и сделать клиент для сервера, который будет уже дергать апишка. Не знаю. Сложненько чет.
>>2678571 Они не делают нужные штуки распыляясь на ерунду required сделали на версию позже С !! что вообще? ConfigureAwait годами висит issue Вон будут фрозен коллекции (спустя столько лет то и потому костыль но хоть так) где фрозенлист??? Контракты похерили ибо делали жопой... Ну сделайте прямыми руками что ли. Дайте возможность расширить статики Где типизированные специальные коллекции? Что за дичь вообще с коллекциями в шарпе.
>>2678591 >распыляясь на ерунду Они сделали обобщённую математику, и это действительно мощная фича.
>required сделали на версию позже Ну да, и даже field до сих пор не завезли, хотя казалось бы вещь насущная, сократит кучу кода, и легко реализуемая.
>С !! что вообще? Это странная фича, и она на мой взгляд будет не согласованной с nullable нотацией, когда если нет ?, то сущность почти гарантированно не нулл. Кроме того, при некорректном обращении к нулл, экспшн и так будет кинут.
>где фрозенлист? ImmutableArray? ReadOnlyMemory?
>Дайте возможность расширить статики Экстеншены - это дурнопахнущий стиль. Код читать не возможно. Кроме как для кастрированных по сравнению с джавой енумов, оно нигде не оправдано.
>>2678644 >Они сделали обобщённую математику, и это действительно мощная фича. а еще сделали main без programs...
>при некорректном обращении к нулл, экспшн и так будет кинут ага. и будет поломан стейт. А чтобы не поломать стейт...проверяйте аргументы. то есть if(is null) throw то есть !! А нулабле нотация вообще не причем - она не более чим хинт. Причем частенько тупящий на ровном месте. Аттрибуты из Diagnostics немного помогают, но именно что немного.
>ImmutableArray? фрозен != иммутабле. Абсолютно разная реализация, потребление памяти и перфоманс.
> ReadOnlyMemory? Имеет свой апи. Никак не соотносится с IReadOnlyList.
>Экстеншены - это дурнопахнущий стиль. Код читать не возможно. ножом можно убить, запретим ножи - будем резать вилкой ) всему свое применение. посмотри на банальный Dictionary. Там нет банального GetOrAdd(key, Func<T>). И куда ты будешь это добавлять? в хелпер что ли? экстеншены отлично решают такую тупость. И такого очень очень много
расширение статики - банально для создания дополнительных фабричных методов которые постоянно приходится пихать абы куда
(оффтоп - в котлине экстеншены вообще юзаются на полную. и с помощью скоупов (в шарпе их нет) делегатов пропертей (опять же их нет в шарпе) и необязательности классов (в шарпе нет) создается очень читабельный и крутой DSL что шарп нервно курит в сторонке)
>>2678644 >ImmutableArray ну ладно я глянул его реализацию. оказалось что оно не на связанных списках, а тупо array с копированием, от чего я немного ШТААА
то есть технически если привести его сразу к IReadOnlyList мы получим фрозен, но блин это продолжение того же бардака что изначально в шарпах с коллекциями. Там и так дерьма хватает, но вместо того чтобы сделать фрозенлист элементарный придется подключать ImmutableArray с его левой семантикой. Проще продолжать жить на собственных велосипедах, ведь порядка в шарпе не дождаться никогда.
викторина от капчи просто убивает: Б?ТИ(Е). вот что это (цензура)
>>2678700 е было написано очень бледно-зеленое на зеленом. Так что решал я изначально Б?ТИ Я предположил что оно относится к слову только после того как капча сменилась. Потому и написал его в скобках и отправил пост.
Зачем подкручивать разность цветов до еле читабельного если ботам плевать на эту разницу, а человек страдает.
Сап, двощ. Есть один GridView с TextBox для ввода и кнопочка "Добавить". На TextBox'ах висит Validator. Подскажи как на клиентской стороне блокировать кнопку пока валидатор не скажет что все збс? Правильно ли я полагаю что без жаваскрипта не обойтись? Полоумный поисковик предлагает решения типа пикрелейтед, но при выполнении ругается на НуллПоинтерЭкспешин при обращении к кнопке из скрипта(возможно она еще не создана в момент вызова, я хуй знает про этот жизненный цикл страницы).
Есть класс, наследующий базовый класс: public class TestCommand<T> : BaseCommand<IViewModel<T>> { }
этот базовый класс реализует интерфейс IBaseCommand public class BaseCommand<T> : IBaseCommand<T> { }
Чому я не могу добавить экземпляр команды в список типа IBaseCommand var myCommand = new TestCommand<Document>(); var commands = new List<IBaseCommand<DocumentViewModel>>(); commands.Add(myCommand);
Ошибка: System.InvalidCastException: "Unable to cast object of type 'MyApp.TestCommand`1[MyApp.Document]' to type 'MyApp.IBaseCommand`1[MyApp.DocumentViewModel]'."
Но сработало бы, если бы я первое написал так public class TestCommand<T, V> : BaseCommand<V> where V : IViewModel<T> { }
>>2679372 У меня будет куча команд разных типов. Мне надо как-то их все хранить в одном списке, поэтому я создал интерфейс IBaseCommand<T>. Ну, понятно, что мне не нужен Object, мне надо с этим дальше работать.
>>2679387 Я прочитал про ковариантность и контрвариантность, но я так и не понял почему вот это public class TestCommand<T> : BaseCommand<IViewModel<T>> { } Совершенно не то, что это public class TestCommand<T, V> : BaseCommand<V> where V : IViewModel<T> {}
>>2679453 У меня есть подорзрение, что ковариантность тут не при чем, а дело в том, что в во втором варианте тип указан конкретный IViewModel<T>, в то время как V as IViewModel<T> обобщенный.
>>2679387 И что характерно, подобные вопросы идут в основном от десктопщиков, пытающихся какими-то хитровыебаными способами прокинуть данные в UI или обратно. По крайней мере вопросов от бэкендеров, вроде "я тут хотел гланды через, жопу удалить, но у меня A<B> не кастится к <D>", на порядок меньше.
>>2679614 >Что характерно, вопросов проблеме о сохранения заряда аккумуляторов в теплых странах меньше, чем в холодных. Очевидно потому, что на севере живут криворукие уебаны.
>>2679732 В зависимости от того для чего ты учишься. Если планируешь потом где-то работать, то придется знать либо студию либо райдер. Так что, хоть что-то да придется устанавливать. Ну и 12 гигов студии - это фигня с тем, что тебе может еще понадобится установить для разработки. У тебя одних докер контейнеров гигов на 20...30 может быть или БД всяки. Поэтому покупай себе максимально возможный дисковый объем иначе вместо нормальной разработки постоянно страдать будешь.
У МЕНЯ ПРОСТО КРЫША УЖЕ ЕДЕТ НАХУУУУУУУУЙ Вот код int pageIndex1 = 0; DocumentPage page; // Выполняем цикл, вызывая GetPage() до тех пор, пока не вернется null do { page = GetPage(pageIndex1); pageIndex1++; } while (page != null || pageIndex1 != 350);
Тут ПРОСТО надо выйти из цикла, когда page будет null ИЛИ когда pageIndex1 будет 350. НО ОНО НЕ ВЫХОДИТ, БЛЯТЬ. page становится null уже где-то на 100 индексе, но не выходит, пока pageIndex1 не будет 350. КАК?! Сука, там же ИЛИ, а не И! Просто пиздец, я над какой-то ебанистикой сижу уже час, нахуй
>>2679951 Ну вот у тебя и работает до момента "ИЛИ СТРАНИЦА НЕ 350" то есть похуй что у тебя налл потому что ИЛИ. Твой цикл выйдет ТОЛЬКО когда страница 350 И пэйдж налл.
>>2679961 Ты разницу между И и ИЛИ понимаешь? При или нихуя не должно ждать до тех пор пока оба условия выполнится, а должно выходить, когда выполняется хотя бы одно. Этого не происходит. То что ты говоришь это И
>>2679941 Зависит от того где и на кого ты будешь работать. Возможные варианты. 1) Работаешь со своим ноутом. Работаешь как хочешь и с чем хочешь. Единственное, что обычно нужно vpn настроить и рабочие месенджеры/почту. 2) Выдают рабочий ноут на котором можно работать как на своем. Просто если сломаешь - отдаешь работодателю бабки. 3) Выдают рабочий ноут, но он настроен как нужно и поставить туда, что-то не из списка - большой геморрой. 4) Удаленная машина. Комп стоит в офисе, либо в ферме, либо вообще виртуалка. Подключаешься удаленно и работаешь. Тут обычно как в 3-м пункте. Большая часть софта только из одобренного списка, что-то новое только по заявкам и/или через безопасников. Тут тоже могут выдать ноут, но слабенький исключительно для подключения к удаленке. На этом ноуте можно уже что угодно ставить, но смысла нет.
Самый нормальный вариант 2, при условии, что тачку выдадут нормальную мощную. Так же хороший вариант 1, т.к. тут ты почти ничем не ограничен и тачку можешь подобрать себе сам. Да это дорого, но в принципе нормальный рабочий ноут отбивается за 2...3 зарплаты. 3-й самый херовый вариант. Плюс он часто подразумевает офис или как минимум гибрид. На удаленке такое редко бывает. И как раз в таких вариантах любят ставить всякие анальные трекеры и прочий контроль. 4-й вариант тоже так себе. Тоже могут быть зонды, хотя и далеко не везде. Но... Сейчас это уже почти стандарт. По крайней мере в финтехе только так. Так что рано или поздно все равно с этим столкнешься. Во вторых в очень многих конторах есть очень много лазеек, который позволяют весь этот анал-карнавал обходить и работать более-менее комфортно. Даже на своей машине, заглядывая на удаленную только для отметок, почты и еще какой-нибудь мелкой фигни.
Еще бывают странные хитровыебанные схемы (например у газпрёма). Там тебе выдают спец флешку с линуксом и прописанными доступами. Ты ее втыкаешь в ноут/комп. Грузишь с нее линукс и уже с него подключаешься к удаленной рабочей машине в офисе. Причем там куча головняков всяких возникает на любом этапе этой цепочки.
>>2679941 >Вообще у нас импортозамещение же, какая вижла, какой виндовс нах Телевизор меньше смотри.
>>2679941 По большому счету, абсолютно похуй на чем и чем ты кодишь. Главное чтобы твой конечный продукт заводился и работал на той/тех системах которые указаны в ТЗ. Но если твоя рабочая тачка обязана находится в каком-либо контуре, то тут уже все зависит от того, что прописано в требованиях у безопасников. На чем они скажут, на том и будешь работать.
Подскажите можно ли через dotnet-symbol загрузить pdb с SMB-шары? В доках msdn про это не написано, и я теперь хз как их вытягивать нормально в моем случае. Поверх http раздачу pdb в мойе галере еще не настроили
>>2680176 >>2680379 Хотя не, я понял почему не юзал. Дело в том, что некоторые команды у меня выглядят так public class TestCommandB : BaseCommand<DocumentViewModel> {} И тогда будет конфликт с этими командами. А вариант с двумя дженерик типами работает и так и эдак.
Бля, в вакансии требуют asp.net mvc 5, а я его оригинально и учил до .net core Стоит соваться туда вообще, мне подтянуть знания по mvc 5 вроде как не большая проблема, но страшно, бля.
>>2680522 Сначала спроси зачем они его знание требуют? Если вариант взять старый софт и переделать на новый стек, то вполне можно попробовать. Если же исключительно поддержка старого говна - то нахуй. Такая вакансия ни новичку, ни опытному ничего не даст.
>>2680669 Это вакансия на джуна вообще, сегодня повторю model binding и validation и авторизацию и завтра с ними попытаюсь связаться, чисто на удачу, конечно. Не получится, после 10 мая буду еще искать.
Если я сделаю так: arr.Wher(x => x is User).Select(x => x as User), линку сначала отфильтрует а потом выберет, либо будет применять фильтр при селекте?
Ну. Т.е. как будет Так :
IEnumerable<object> a(IEnumerable<object> arr) foreach(var it in arr) { if(it is User) yield return i; } IEnumerable<User> b(IEnumerable<object> arr) foreach(var it in arr) { yield return it as User }
или : IEnumerable<object> a(IEnumerable<object> arr) foreach(var it in arr) { if(it is User) yield return it as User; }
>>2680848 > линку сначала отфильтрует а потом выберет, либо будет применять фильтр при селекте? Вся цепочка будет проходить для каждого элемента по мере запрашивания элементов. Гугли IEnumerable
Сейчас смотрю старый курс Александра Шевчука и как же всё было лампово в 2012. Ставишь вижлу и можешь любую прогу спрограммировать. А сейчас напридумывали всякой параши вроде докеров, кубернетисов всяких, надо миллион прог всяких ставить.
вообще все работает для каждого элемента если в цепочке нет элементов где нужна полная материализация. Например GroupBy ты не можешь сделать без полной материализации.
>>2680928 И сейчас можно писать что угодно. Докер/кубы это про распространение, но ты можешь поискать контору где каждый разраб ходит и руками по фтп раскатывает на виндовый сервак бинари под фреймворк 3,5. Лично я бы не захотел туда идти
>>2680993 приходишь, а там такие же как ты...аааа А где деды? А они свалили с такого проекта, не жависты же, вот и приходится нанимать хоть кого то на замену
Почему в сишарпе используется UTF-16? Там же всё равно все символы не влазят, потому что уже есть символы по 4 байта, но в то же время чаще хватает 1 байта на символ. Следовательно UTF-16 избыточный и жрёт в 2 раза больше памяти.
>>2681015 так сложилось исторически. из-за совместимости с VB который юзал тогда BSTR, который по факту UCS-2 с префиксом длины, который поддерживался в NT и таким образом работал с COM/OLE, потому что строки utf-8 трудно индексировать и вообще нужно работать особым образом. позже это все переросло в UTF-16 (после изобретения стандарта)
потом родился шарп и ему ему ж тоже нужно работать с COM/OLE/Automation и существующим кодом VB и потому выбора и не было.
>>2681102 пхп конечно пытается стать как жава, но... с огромным количеством детских болезней, которые никуда не денутся никогда (читай https://habr.com/ru/articles/142140/). И если думаешь, что "так 10 лет после этой статьи прошло. все уже не так", то ты сильно ошибаешься.
пхпшник может просто знать подводные камни и приучиться их обходить костылями. это не программирование, а костылирование.
Это из разряда "мы не ищем легких путей". так блин поищите. когда потом переходишь на питон, то ссышь кипятком от того как там все стройно и понятно в своей основе. Никаких тебе неявных переводов в числа, нормальные коллекции, единый подход ко всему, нормальные исключения, все ведет себя предсказуемо.
>>2681004 >приходишь, а там такие же как ты...аааа >А где деды? А они свалили с такого проекта, не жависты же, вот и приходится нанимать хоть кого то на замену Кстати неплохой вариант для новичка. Приходишь такой на проект о котором никто ничего не знает и спокойно с новоприобретенными братюнями вкатунами познаешь все тонкости профессии. И предъявить вам особо никто не сможет. На все доебки можно спокойно делать "у нас же лапки", "насяльника стараемся как можем", "ты не настолько дохуя нам платишь козел, чтобы выебываться" и потихоньку пилить код. Так можно как минимум полгода-год проковырятся. И либо стать охуенным гуру, либо спокойно свалить на более другое место с хоть каким-то реальным опытом в резюме.
Нужно ли читать Рихтера перед собесами? Дело в том, что встречал сишарп-программистов, которые много лет работают в этой сфере, но даже не слышали про Рихтера. Так ли он нужен?
>>2681534 Первые несколько глав можешь навернуть для общего развития. Чтобы хотя бы базу разбирать. CLR от CLS и CTS отличать, ну или зачем .NetStandart нужен, основы типов и т.д. Непонятные вещи можешь по диагонали прочитывать. Сейчас найти человека который её хотя бы до конца второй части дочитал - редкость.
Но лучше советую перед собесом краткий справочник Албахари пару раз перечитать. Там всего 300 страниц и самая мякотка выбрана без лишней шелухи. Только это если что, по самому C# и самой платформе .net По фреймовркам типа ASP или EF так просто не отделаешься. Там уже опыт нужен.
Помогите советом по именованию типов для WPF. По конвенция вью модели должны заканчиваться на ...ViewModel, то есть как-то так: ViewModels > Memes > YobaViewModel.cs Насколько хуёво будет опустить такой постфикс? ViewModels > Memes > Yoba.cs Ведь то, что Some.cs это ViewModel, должно быть понятно из нэймспэйса, да и если опустить постфикс, то это даёт экономию в символах - можно сделать название типа длиньше.
>>2681659 >Ведь то, что Some.cs это ViewModel, должно быть понятно из нэймспэйса Кому понятно? Неймспейсы написаны где то там в юсингах и поди разбери к кому относится.
>>2681660 В шарпе дроч на имена, там это очень важно. Важно приписывать Аsync, а реализация интерфейса ориентируется на имена свойств и методов. В какой-то степени на этом основана работа Visual Studio, ну и в принципе вот такой подход выбрали.
К примеру для бейсика в большинстве случаев именование не важно. Там не надо приписывать Аsync, а то, что метод поддерживает ожидание, видно из подсказок. Имена реализуемых свойств не обязательно должно совпадать с именем свойства интерфейса.
У всего есть свои плюсы и минусы. К примеру в шарпе достаточно через двоеточие приписать имя интерфейса и если имена совпадают, то на этом твои полномочия всё. В бейсике тебе придется реализовывать КАЖДЫЙ элемент интерфейса самостоятельно - ты должен найти соответствущее свойство и приписать Implements InterfaceName.PropertyName
>>2682121 У меня какая-то хрень с биндингами. Привязал список, а когда я извлекаю итем модели и вставляю его в другое место списка, то на стороне вью удаляется экземпляр и создается новый (что ожидаемо). Как только я меняю свойство модели, то свойство почему-то меняется сразу в двух итемах - в текущем и в якобы удаленном.
Удаленный итем вью где-то висит мертвым грузом и я не понимаю как это уловить. Событие Unloaded происходит. Правда если в этом событии очистить дата контекст, то итем вроде как удаляется. Не уверен что проблема в нем, скорее всего это разрывает биндинги, привязанные к дата контексту.
Возможно виртуализация. У меня есть еще одна вьюшка, где применяется биндятся итемы панели, которая не поддерживает виртуализацию и вот там такой проблемы нет.
Нет никакой функции, как у GC, которая бы узнала какие кто ссылается на экземпляр? Пытался заюзать BindingOperations.ClearBinding но такое ощущение, что это не работает. И можно ли использовать Disposе, вроде как в MVVM это не очень правильно?
И еще маленький вопрос. Я связал три свойства A-B-C в двухстороннем режиме. И когда я меняю свойство C, то почему-то логи показывают, что порядок изменения свойств неожиданно идет в противоположном направлении т.е. начиная с A, затем B, затем C. Это нормально или логи не успевают регистрировать? Разницы между временем логгирования естественно нет.
>>2682121 >>2682135 В догонку. Собсно, а зачем нужна виртуализация, если я добавляю в список ровно тот же экземпляр модели, но вместо того, чтобы брать предыдущий итем, связанный с этой моделью ранее, создается совершенно новый итем?
>>2682141 Ну он визуально исчез из вью-списка и произошло событие Unloaded для данного итема. Поэтому я и написал "якобы". Но при этом срабатывает метод OnPropertyChanged с уникальным UID "удаленного" итема - из чего я понял, что экземпляр не удален.
А по поводу очистки дата контекста, это я не так выразился. Просто перестают обновляться свойства, а уничтожен ли экземпляр — неизвестно.
>>2682176 >OnPropertyChanged он не кидает, а ловит разве что Я так и написал. Я его использую для ловли изменения свойства. И несмотря на то, что визуально контрол исчезает из списка, OnPropertyChanged ловит изменение свойства этого контрола.
>при этом он очистит свой датаконтекст А по факту, пока я вручную дата контексту не присвою null, OnPropertyChanged будет ловить изменения.
>>2682227 без кода этот разговор ни о чем. кто знает как ты там подписываешься на вьюмодель. Даже если забыть про сильную подписку или слабую (которая все равно будет работать пока не придет GC), то например из твоего лога никак не видно как у тебя вдруг на старых итемах стал титле "A"
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.RoleManager`1[Microsoft.AspNetCore.Identity.IdentityRole]'
Второй день уже ебус с этой ошибкой. Какого хуя он не инжекстится .
>>2682262 Вот относительно ViewModel хз. Мне кажется, это подписи нужны для новичков. Любой класс может быть вьюмоделью, если он INPC, какой смысл это приписывать? Но я не знаю дают ли имена в продакшене.
Что касается примеров пикрил, то первый наименее удачный вариант. Во-первых там какая-то тавтология из ViewersOverviewes. Второй и третий слишком абстракные, все что нам сообщается, что это детальная вьюмодель, но вьюмодель чего? В первом я бы удалил одно из слов Viewers или Overview.
>>2682262 Ну вообще делят так. 1 папка ViewModels/Views/Controllers то есть основное деление по типу (внутри могут быть сгруппированы по фиче) - позволяют расположить это в разных сборках. Когда пишешь на хамарин то у тебя вьюхи там отдельно и это жизненно необходимо.
2 Основная группировка по фиче - вьюмодели и вьюхи лежат рядом в папке Feature (где модель спорный вопрос - ибо может быть и рядом если у тебя плагин какой, так и в другой сборке чтобы таки отделять). Так удобнее, но как бы нет изоляции вьюмоделей от вьюх, что не позволяет менять виды. Но вот вопрос в том - надо ли...
>>2682470 >Мне кажется, это подписи нужны для новичков Подписи нужны для удобства. Adapter, Proxy, *Service и так далее - дают прямую подсказку зачем нужен этот класс. вьюмодель ничем не отличается. А где он там лежит - вообще не имеет значения, потому что неймспейс обычно не виден при использовании имени класса. Да, бывают длинные имена, но тут выбор меньшего из двух зол - и выбор очевиден.
Не очевиден? Допустим ты читаешь чужой код на гитхабе, в диффе, или даже в IDE и видишь класс User. Удачи тебе выяснять что это на самом деле вьюмодель. Тебе придется читать блок using что мало поможет, в IDE ладно ты можешь навести мышь и узнать неймспейс...но и он тебе мало поможет если используется feature структурирование проекта.
Помогите неофиту с философской проблемой. Есть один метод который работает с сетью и в котором на весь метод расположен try/catch. Сеть может отвалиться и тогда создастся эксепшн. Я хочу сделать перезапуск этого метода через n секунд. Если я вызову в этот метод в catch то насколько я знаю создастся еще один "экземпляр" этого метода в памяти и вообще получится аля рекурсия. Повешать try/catch выше на вызов этого метода тоже шляпа потому что я вызываю этот метод множество раз из разных участков кода. Пока что единственное что я придумал это поставить метку в начале и в catch перемещатся через goto. Существует ли какой-то более элегантный способ?
>>2682767 Я тебе выше написал, что каждую новую версию надо учить специально. Сишарп - это не джава, где 30 лет обратной совместимость. Тут каждый год всё меняют.
>>2682805 Батарейки постоянно меняются, иногда с обратной совместимостью, но часто и нет с здоровыми мануалами по миграции Синтаксис только дополняется, иногда фичами которые на столько фачсты что люди поднимают версию языка если не получается поднять версию кора
>>2682815 В сишарпе 8.0 ввели понятие ссылочных типов, не допускающих null, которые выглядят также как старые ссылочные типы, допускающие null. Так что это не дополнение, а замена.
>>2682803 >Не жалуйся только потом что тебя отпиздят за углом галеры наоборот, будут считать гуру который знает как испольовать goto (ведь обычный программист знает всего 1-2 случая где полезен goto, а тут такой мастер)
>>2682827 Они опциональны, это сахар. Дополнение для языка являющееся лишь подсказкой которую иногда ещё и осознано глушить приходится null! Без доп настроек string a = null даже не ошибка и компилер только предупреждение кинет
Какой же TreeView обоссаный кусок кала. И не менее забавен цирк из туториалов. Банально гуглишь драг энд дроп и 99% всех туторов сводится к тому, что дропается Selected Item — это настолько далеко от реальности, что аж зубы сводит.
По факту юзер не всегда перетягивает выбранный итем. Поэтому нужно чтобы было событие типа PreviewSelectedItemChanged, возникающее при MouseDown, чего естественно хуй есть и естественно просто так это не реализовать. И естественно все туторы об этом умалчивают.
Я просто не могу имаджинировать что за ублюдок создал TreeView. Это говно, будем честны, не создано для MVVM никак. Если собрать в кучу все время, которое я потратил на это говно, уж лучше бы я написал с нуля. Это за гранью добра и зла.
Пришлось наверитенить таких костылей, то теперь хрен разбершься от чего вот это >>2682227
>>2682805 У тебя выбор: либо смотреть курс Александра Шевчука, сертифицированного специалиста Microsoft, либо читать метанит, который написан рандом челом из интернета, который даже свой сайт написал на РНР, но учит людей сишарпу.
>>2682820 По итогу во всех проектах установлено nullable disable. И большинство не просто не знают как с ними правильно работать, а даже и не подозревают, что в шарпе подобное есть.
>>2682886 Спасибо, да я уже сделал, просто накопился бугурт. Тут понимаешь, нужно сделать с определенным визуальным стилем и функционалом, поэтому все готовое не всегда подходит. Я сам сделать не против, если бы реализовали БАЗУ.
>>2682227 Короче, в диспозе заюзал BindingOperations.ClearBinding для всех поптисок внутри контрла. Я немного не понял как это работает — я пытался изнутри контрола очистить биндинг снаружи, типа BindingOperations.ClearBinding(this, myControl.DataContext) а надо чистить биндинги на DataContext.
Проблему так и не установил, пока обошелся диспозом.
Подписка на самого себя не вызывает утечек памяти, если хендлер ничего постороннего не удерживает (а на пике не удерживает) - раз Лямбду не отпишешь - два. Ну да получишь немного напряга GC из за циклической ссылки, но спичек что ли мало
>>2683093 ну кто знает что там у тебя у меня когда я прикручивал лайфтаймы к контролам, то особо отмечено что с виртуализацией "Recycling" все нужно делать вручную - там бредятина с событиями смены DataContext и Unloaded
>>2683097 Да я сам не знаю что у меня. Я уже как-то сомневаюсь, что вот эти три подписки (пикрил, нижние строчки) автоматом удаляются, а они у меня буквально для каждого итема. Я их как раз юзал, чтобы реализовать Preview Select.
>>2682652 >>2682470 А почему ViewModel ставят суффиксом? Для коротких названий (DvacherViewModel) удобнее и как будто бы логичнее, но для длинных не лучше ли ставить префиксом типа ViewModelOf...? Например OldSchoolEOTSpammerBitardViewModel и ViewModelOfOldSchoolEOTSpammerBitard.
>>2683292 У меня jwt. При генерации токена я вкладываю в него айдишник. Каждый раз парсить его наполучение айдишника получается ? Методы со скрина возвращают всегда null почемуто.
Все , я нашел ошибку. Если кто еще столкнется с этим, то при генерации токена надо прописывать claims: List<claims>. У меня было тупо claims.toString();
>>2683291 1. у тебя добавилось еще две буквы к и так длинному тексту.
2. когда у тебя в папке будет храниться большой список из подобного ViewModelOfOldSchoolEOTSpammerBitard. ViewModelOfKfftgsdfg. ViewModelOfSdddfgg. ViewModelOfWfftgsdfdg. ... то сложно будет искать нужное — ибо глазу вычленить искомое из середины текста сложнее, чем из начала.
3 (ключевая причина). у тебя список в IntelliSense будет упорядочен не так как надо. Тут ты можешь возразить, мол, у тебя наоборот будет группировка, но IntelliSense прекрасно справляется с фильтрацией, если начать писать "ViewModel".НО, когда ты начнешь писать код, то автодополнение тебе ничем не поможет — оно будет дописывать совершенно не то, что ты хочешь и в один момент твой пердак порвется в колчья. Чем уникальнее начало названия, том меньше придется писать при работе с автодополнением (это мои наблюдения).
>>2683382 Tls/ssl в фреймворке это вообще очко ебаное. Есть проект который в нагрузку к фреймворку ещё и на вин 7 должен работать и это ебучая анальная эквилибристика с сетью. Если можешь то беги
>>2683409 Да сука, мне нужно всю эту хуйню настроить чтобы как раз в будущем избавиться от ебаного легаси говна, а эта хуйня мне сука пишет Bad gRPC response. Response protocol downgraded to HTTP/1.1.
Что происходит при unload контрола? Допустим у меня внутри контрола есть еще один контрол, если я внутреннему контролу присвою null, то событие unloaded в нем уже не происходит. Разве в таком случае визуальный родитель не удаляется?
>>2683291 про сортировку и подсказку тебе написали но и вообще выглядит как дичь
зы: кто там капчу делает? че мелочишься? делай 1000 черных букв на черном фоне и выброси все слова, оставь только слова с потолка типа кувырк. Ну чтобы наверняка.
Мне нужно поменять порядок дженериков в классах. Есть класс типа ClassVasyana<TDva, TOdin>. Надо чтобы он стал ClassVasyana<TOdin, TDva>. В стандартной студии такого рефакторинга нет. Как это сделать? Может есть какое бесплатное расширение? Платных расширений типа решурпер я себе позволить не могу.
>>2683291 >OldSchoolEOTSpammerBitardViewModel >ViewModelOfOldSchoolEOTSpammerBitard А кто-нибудь вообще из числа программистов догадывается, что такой нейминг, мягко говоря, не удобно читать? Что мешает делать пробелы нижним подчеркиванием? Вроде размеры мониторов позволяют, не? Раньше, до 15 века, писари-монахи тоже не были знакомы с таким изобретением как пробел, а может быть бересту экономили. А может просто боялись перечить авторитету предшественников, боялись вякать, мол, тут так заведено, не я эти правила придумал, не мне их менять, я простой монах, маленький и никчемный, там лучше знают как удобнее. Но вот уже как 500 лет человечеству знакомы пробелы. Ну как, знакомо большинству. Но только не программистам. У них особый нейминг, не как у людей. Подчеркивающий, что они наверное лучше и умнее (нет). Вот кто-нибудь реально может объяснить такой дегенеративный нейминг? Почему его до сих пор не искоренили волевым решением, хотя бы в рамках отдельных проектов? Или же может у меня с глазами что-то не так, проблема во мне, а большинство людей нормально воспринимает вот это ViewModelOfOldSchoolEOTSpammerBitard своими могучими глазами?
>>2684223 1. Нейминг был важен, когда кодили в блокноте. Сейчас IDE и даже сраный гитхаб все тебе подсветит. 2. Шарп отлично компилируется с любым неймингом. Лишь бы программисту было удобнее читать.
>>2684199 Я думал "спрятать" сложность имени в нэймспэйсы (тысячи их), типа ...ViewModels.Bitard.OldSchool.EOTSpammer, но меня обосрали мне сказали, что я неправ. Но я просто самоучка без опыта, так что, скорее всего, просто нихуя не понимаю и не пойму похоже. Хотя смысл дописывать ViewModel (Command, Service, Store) кажется понимаю, но у меня пока получаются только длинные имена и я хуею с них.
>>2684284 >ViewModels.Bitard.OldSchool.EOTSpammer Проблема тут в том, что неймспейсы обычно никто явно не пишет, их подключают через юзинги, и часто их много изается в пределах одного файла. Соответственно, имена классов могут начать конфликтовать. Использовать везде полные имена с включением неймспейса - многословно. Использовать имена неймспейсов при указании имени класса избирательно - неконсистентно. Поэтому в итоге используются просто длинные имена классов.
>>2684284 >>2684291 Ещё такое дело что видя неймспейс всегда ожидаю что его можно наложить на структуру директорий и найти нужный мне файл с кодом не имея больше ничего
Делаю приложение на новом модном, молодёжном и современном GUI Windows Forms. Необходимо хранить поля для подключения к БД в отдельном файле имя.cfg . Подскажите, пожалуйста, как правильно описать этот файл и достать из него значения? У меня в проекте автоматически создался файл App.config и в интернете только о нём вся информация. А мне нужен другой файл и из него вытаскивать значения
>>2684199 >догадывается, что такой нейминг, мягко говоря, не удобно читать? подчеркивание тоже отстой. лучшее это camelCase
Но на самом деле это дело привычки в конкретном языке. пишу на языках с разными типами неймингов. Не смешиваю и проблем нет. Попытки притащить чужой нейминг в любой из языков выглядят чужеродно.
>>2684284 >Но я просто самоучка без опыта, так что, скорее всего, просто нихуя не понимаю Угу. Просто когда ты в соло пилишь свой проект или даже в попенсорце на расслабоне, то все твои идеи кажутся такими охуенными и "почему остальные такие долбоебы и не делают так же". А вот когда попадаешь в реальный проект где всем на твои фантазии похуй и над проектом работает команда где у каждого свои задачи, и у всего есть сроки и цели, то начинаешь поинмать, что некоторые вещи то делаются не просто так и почти у всего есть свой смысл.
У меня вопрос про абстракции. Давайте представим, что я делаю игру. И вот я - бака, который хочет абстрагироваться от апи для рисования графики. Как это должно выглядеть? Видится мне, что это должно выглядеть примерно как: Папочка Graphic, в ней подпапочки directx, opengl, vulkan в папочке Graphic - я делаю класс Renderer и кучу примитивов: спрайт, полигон, текстура и т.д. В своем приложении я использую эти вот абстракции. Но вопрос какой. Я должен же как-то "движку" сказать, какой API использовать. И вот тут уже сложно становится. Самое простое решение видится, это статический класс GraphicConfig, который при старте приложения - инициализирует все че там надо. И второй класс GL_PrimitivProvider, который будет провайдить нужные графические примитивы. Но чет чем больше я об этом думаю, тем больше мне кажется, что как-то не туда я думаю.
>>2684656 >Я должен же как-то "движку" сказать Нет, не должен. Рисование графики - это библиотечный функционал. Он должен работать с любым допустимым API. Конкретный API выбирается на клиенте. Оба предложенных тобою способа приемлемы. В общем случае решается через DI.
>>2684712 Значит выделяешь себе день. Затариваешься пивком, закусью. Включаешь любимое музло и ручками переделываешь. В итоге имеешь приятное ощущение опьянения, чувство от проделанной работы и того насколько твой пет-проект охуенен.
>>2684712 Ну. Просто я даже с трудом могу представить, как такой рефакторинг должен работать на самом деле. Вот давай прикриплейд. Что должно произойти при применении такого рефакторинга который ты хочешь.
Как тестировать сишарп-приложения через VS Code? Дело в том, что проект для тестирования создаётся как новый проект в рамках того же решения, что и основной. Но VS Code не поддерживает систему решений, а только отдельные проекты. Получается через VS Code невозможно тестировать приложения?
>>2684878 У меня книжка по версии дотнета 2.1, а по новой молодежной 7.0 книжки ещё не вышли. Как я должен вообще учить сишарп, если они старые версии ломают, а по новым инфы ещё не вышло? Замкнутый цикл просто!
>>2684880 Почему на голанге я могу взять любой код 10 летней давности и он работает на новой версии голанга, а тут 2 года прошло и ничего не работает? В джаве вообще по 20 лет сидят на старых версиях и всё работает. Один сишарп особенный и ему надо вот прям последнюю версию. Как в продакшене вообще работают? Каждый год переписывают всё на новые версии дотнета? Что-то сомневаюсь. Бизнес такой ерундистики не потерпит.
Не. Ну конечно я не знаю. Может быть в коммунити голанга не принято читать доки. Там какой-то тутор есть, в котором 3 команды на все случаи жизни которые они выучили и всю жизнь пользуют. Но блин. Ссылка, в которой буквально написано что сделать надо, чтобы более старые версии проектов создавать. Но зачем ее читать? Надо прийти в тред шарпа и начать вонять, как неудобно сделать одну команду.
Вот попробовал бы кто-нибудь собрать проект для плюсов написанный в 2003м сейчас. Уууу, там такое-то приключение каждый раз(потому что охуенно же пилить абсолютные пути до всего, да? потому что охуенно - нахуячить каких-то непонятных флагов, которые выпиливают в дальнейшем, охуенно тащить ноунейм либы, которые сдохли и даже бинарей не найдешь больше). Да или что-то из жавы, которая, охуеть как обратносовместима, но чтобы собрать - поебись разбираться, где там Gradle, где там Maven, где там Ant, кто в Netbeans собирал, о, а тут кто-то либу использовал от челов которые сдохли, ищи теперь бинари той либы и прокидывай. Но эт хуйня же все. Вот выполнить одну команду в cli - ПИЗДЕЦ, СЛОЖНО.
>>2684911 ПРОЧИТАЙ, ЧТО НАПИСАНО: >> to create a project that targets a framework earlier than the SDK that you're using, you might be able to do it by installing the NuGet package for the template. Common, web, and SPA project types use different packages per target framework moniker (TFM). For example, to create a console project that targets netcoreapp1.0, run dotnet new install on Microsoft.DotNet.Common.ProjectTemplates.1.x.
>>2684912 О каких нугетах речь, если команда dotnet new list выдаёт ошибку. 2.1 не создаёт даже консольных приложений. Скорей всего там не SDK, а только runtime заложен.
>>2684916 Ты троллишь чи как? У тебя на первом скриншоте явно есть 2,1 как сдк. Или ты не знаешь что нугеты это просто пакеты, среди которых могут быть и инструменты для разработки, вроде ef'овских, для создания миграций, тулзы для нанофреймворка чтобы прошивать девайсы и много чего еще?
>>2684872 Маялся весь день с проблемой, но в целом разобрался. 1) Проблема в том, что на убунте 22.04 новые библиотеки для SSL, а дотнеты к ним привязаны и из-за этого отказываются работать. 2) Ради эксперимента поставил убунту 18.04, накатил дотнет 2.1 и всё завелось сразу без танцев с бубном, просто потому что там старые библиотеки для SSL.
>>2685271 > А ты сразу знал куда и что писать? Зачем тебе знать куда и что писать?
Давай я встряну. Вот я пошел в вуз. Нас учили кодить на плюсах. Ну так вот. Второй курс - родаки ебут мозги, что не работаешь. Ок-да. Идем искать работу. На работе - просят прикрутить JWT. Гуглишь че это вообще такое и как его прикрутить. Просят сделать круд-контроллер для таких-то моделек. Гуглишь че такое круд, че такое модельки, что такое еф и как это все прикрутить. Просят сделать фильтр по пермишинам для авторизации. Гуглишь че такое фильтр, че такое пермишины, как их прикрутить. Просят переписать чужой круд контроллер на асинк-эвейты. Гуглишь че за асинк-эвейт, переписываешь.
Какие еще нахуй книжки? Камон? Я за уже 10 лет работы кодером - ни одной не прочитал, если не считать K&R, SICP, совершенный код, идеальный программист, и "Введение в системы баз данных" от Дейта. И вот эти-то книги я прочитал в вузе, потому что их требовали.
>>2685271 ясно. у тебя там все строго - пускают только на двач. другого интернета ( в котором ДОХРЕНА инфы обо всем на свете - бери да изучай) просто нет.
>А ты сразу знал куда и что писать? когда только рождался этот асп.нет кор то там еще была проблема что копируешь код, а он не запускается потому что нужен какой то неймспейс который не пойми где лежит, что ставить с нюгета. Потом с этим устаканилось и появились метапакеты и все стало проще. Но ты не ищешь легких путей ясно.
>>2685271 >А ты сразу знал куда и что писать? Дело не в этом я в принципе не оперирую такими понятиям "куда писать код" А дело тут в косности твоего мышления. Вы, вкатыши, с какого-то фига решили, что существуют какие-то 'шаблоны', в которых поняв 'куда нужно писать' ваш говнокод, вы магически научитесь программировать/разрабатывать. А потом придя в реальный проект, начинаете охуевать, "а чего тут не как в книжке написано", "а-а-а, клятый микрософт опять все поменял".
>>2685333 Лул. Прям с твоего описания - вспомнил чела который со мной вкатывался. И вот че обидно. Сам дядька был типа прикольный. 38 лет, решил сменить работу таксистом на кодера. Прошел курсы. Общительный. Внешне - вроде старался. Реальная задача: Пользователь на форме указывает файлик csv такой-то структуры, надо обработчик сделать, который должен достать данные, привести к нашей модели и сохранить в бд. Три месяца. Три месяца чел не мог сделать. При этом - если спрашивал, то как-то странно, в духе: а как делегат пробросить туда, а надо ли делать интерфейсы и в таком духе. Конечно, там сверху навалилось, что микросервисы, докеры и все это вот, видимо сложно сразу все переварить. Но ХЗ. Вообще. Немного обидно за дядьку. Мне он нравился. Но как слышал, он попросился в тестеры. Там полгода посидел, прошел еще курсы и таки в сбер съебался. Надеюсь у него все ок в конечном итоге.
>>2685346 >Рихтера не читал? Всегда считал советы читать эту книгу новичками каким-то жирным троллингом, типа сначала выучите ассемблер, основы электротехнику и линейную алгебру, а только потом начинайте красить кнопки. Для новичков она тяжела и ничем им не поможет решать возникающие у них проблемы. Для опытных она бесполезна, т.к. во-первых давно устарела, во-вторых, в документации от МС и исходниках всё написано намного подробнее и современнее.
>>2685281 Вообще, какой вывод можно сделать? Получается линукс не подходит для сишарпа. Вся эта кроссплатформенность сделана только, чтобы заливать веб-приложения в докер-контейнер. А среда разработки по-прежнему остаётся только Винда. На винде можно поставить все дотнеты: фреймворки, кор 2.1, 3.1 и новые 5-7. И всё работает и коробки. Просто в вижле ставишь нужную галочку.
>>2685539 >Получается линукс не подходит для сишарпа. Как будто бы для любого другого языка тебе не придется ебстись с зависимостями, библиотеками и т.д. Вся кроссплатформенность работает только в самых популярных и распространенных вариантах. Шаг в сторону, другая версия, другое ядров, другая сборка и ты уже сосешь хуйцы. Линукс ни для чего не подходит. Эта ебань создана любителями пердолинга настроек для таких же ебнутых красноглазиков. >>2685539 >А среда разработки по-прежнему остаётся только Винда. Нет.
В чужом коде меня больше всего сбивают с толку кастомные extension-методы. Особенно бесит такое читать не в IDE, а где-нибудь в вебе, где явно не видно, что это экстеншн, и какая у него логика. Удивляют в связи с этим настойчивые пропосалы сообщества шарпистов сделать в новых версиях дотнета экстеншн проперти, индексаторы и прочий ад, и чтобы всё это ещё могло интерфейсы реализовывать экстеншинами.
Насколько это вообще нормально, зрело, чисто и по-синьорски использовать экстеншены в коде?
>>2685732 > Накатывать виртуалку с шин11 и там программировать? Ты заебал уже весь тред жиром заливать. Два мастадонта под шарпы это студия и джеты, есть софт попроще по типу монодева или эклипаса. Все из перечисленных кроме стадии есть нативно под прыщи
Если майки такие пидарасы то что ты тут делаешь? Продолжаешь жрать кактус?
> учить ASP.NET? Тебе даны божественные мсдн и гитхаб а ты выёбывешься. И к слову асп.нет уже сто лет как сдох и закопан вместе с фреймворком
Смотрю туториал, где делают магазин на razor, но я чет не понимаю, нахуя мне вот этот вот класс и нахуя вот это вот использовать тут, если можно репозиторий напрямую инджектить
Есть мой код который подгружает класс из длл, создает инстанс, приводит его к интерфейсу и дергает интерфейсный метод. Мой тред проваливается в пользовательский код из длл что-то там делает. Допустим, слишком долго поток не возвращается оттуда и я хочу все прекратить и продолжить со следующей длл.
Как сказать блядскому потоку чтобы все бросил и возвращался немедленно?
На фреймворке абортом наверное можно попробовать, на коре аборт выпилен, а интерапт не спасает если поток на той стороне, например, в вайл тру хуярит. Токены вообще не работают, потому что пользовательский код может болт положить на проверку отмены. Какие еще варианты?
>>2685741 >Особенно бесит такое читать не в IDE А нахуя ты читаешь код не в IDE ? Это такой вид мазохизма, типа "у меня есть шуруповерт, но я буду закручивать шурупы отверткой" ?
>Насколько это вообще нормально, зрело, чисто и по-синьорски использовать экстеншены в коде? Нормально. Большинство кода в продакшене сейчас состоит из одних экстеншенов с кучей лямбд.
>>2685955 Только через костыли ебаные. Можно поебаться с подпроцессами. Написать маленький бинарник-загрузчик сборок и положить его рядом с основной программой, дальше запускать бинарник в отдельном процессе и вызывать Process.WaitForExit(таймаут) и Process.Kill(). Либо запускать новый тред и пользовательский код в нём, а после таймаута не останавливать его и запускать следующий в надежде, что предыдущий не будет жрать много ресурсов и когда-нибудь сдохнет.
>>2685981 Ну я стараюсь не пачкать тредпуловские потоки об эту таску.
>>2685995 >Либо запускать новый тред и пользовательский код в нём, а после таймаута не останавливать его и запускать следующий в надежде, что предыдущий не будет жрать много ресурсов и когда-нибудь сдохнет. Сейчас так и работает.
Но хотелось бы чтобы чистилось все после каждой длл. AppDomainов нет, зато есть AssemblyLoadContext, который даже метод анлоад имеет на себе. Осталось придумать велосипед, чтобы поток вернуть.
С отдельным процессом еще есть вариант, да. Туда передать стейт, а потом прокидывать сигнал обратно, что все дон или таймаут. Возможно самый правдоподобный способ.
Вроде еще есть вариант через кастомный SynchronizationContext что-то сообщить потоку.
Всем привет. Я старый пердун, 10 лет пилю на винформах и плюсах всякие мутные поделки. Хочу стать упругим-зубастым и выучить современный стек. Может кто советов по профессиональному росту дать? Можно в тележке например.
>>2686471 Если хочешь бабла, то: На бэк: .Net6 (и выше), ASP.Net Core, EF Core (и/или Dapper) На фронт: реакт или ангуляр. Можно потом еще блейзора сверху навернуть, но это уже больше для себя и если зайдет.
Если для души: то Unity (Я х.з. какая у них там сейчас версия шарпа/моно в ходу). Но там мало бабла и выгорание.
Бля, шо делать, код генератор отказывается добавлять identity в 19 студии пытался уже и efcore под 5.0.2 переустановить как советуют в интернете, удалить .vs и все bin и obj, перезапустить студию и попробовать снова, а хуй там.
>>2686718 Во первых, прекрати страдать хуйней и поставь уже 22-ю студию, она гораздо пизже 19-й. Во вторых команды которые вводишь и сообщения об ошибках показывай.
>>2686744 Та какие комманды, просто пытаюсь идентити добавить через интерфейс и оно грит There Was An Error Running The Selected Code Generator Тащемта разобрался, обновил ef до 5.0.17 и оно заработало
Почему в конструкторе класса параметры записываются в расширенное свойство, типа this.Name вместо того, чтобы записывать напрямую в private name? Разве это не двойная работа?
private string name;
public string Name { get{ return name; } set{ name = value; } }
>>2687240 Тот кто писал захотел абстрагироваться от приватного поля и дать всё на откуп сеттеру который может что то сделать с значением по пути. Конкретно тут вопрос больше зачем явно прописывать приватное поле если оно не нужно
>>2687100 Новичком вряд ли. Даже у опытных очень часто требуют знание каких-нибудь фронтовых фреймворков. Чтобы разраб как минимум мог понимать, что там под капотом, залезть внутрь понять и отдебажить. При необходимости, что-нибудь подправить или какой-нибудь мелкий компонент написать. Вакансий где 100% бэк относительно мало, а для новичков их практически нет.
>>2687240 А вот на собесе тебе этот вопрос и зададут. И спросят, почему нужно делать именно так (установка приватного поля через публичный проперти в конструкторе) и каким буквам SOLID-а, это соответствует.
Двач, допустим, у меня есть мак (ноута/ПК на винде нет в принципе) и желание выучить C#/.NET. С чего начать (кроме очевидного, пойти почитать пикрил). В чем сложность работы с C#/.NET на маке? Сможет ли бывшая JS-макака освоить C#?
А может быть так, что когда я меняю контекстные данные родительского контрола, дочерние элементы автоматом начинают всасывать их в свои контекстные данные.
А можно как-то логгером (Serilog) отловить WPF ошибки? System.Windows.Data пишет только в окно интерпретации, если происходят какие-то ошибки привязки.
>>2687621 лови чем угодно же создаешь свой листенер и подписываешься if DEBUG PresentationTraceSources.DataBindingSource.Listeners.Add(new BindingErrorTraceListener()); PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; #endif
>>2687656 Помнится как-то на почившем Лурке была статья про goto. Как по мне - признак говнокода, нежелание юзать методы нормального человека. Но норм примеров гото я не видел за 4 года учебы и 3 года стажа
>>2687628 Как я понял, new BindingErrorTraceListener() я должен сделать кастомным, там я методе WriteLine пользуюсь своим логгером и пишу в текст.
Но тут две проблемы. 1. WriteLine принимает стринговый месседж и я не знаю как отлавливать разные уровни сообщения. Допустим внутри WriteLine у меня такое: Log.Error(message); Соответственно, если я запишу: PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Information; То у меня все месседжи будут помечены как Error, даже если они таковыми не явялются.
2. Ошибка выводится дважды. В серилоге у меня настроено два места вывода - текстовый файл, и окно интерпретации. Соответственно один из дефолтных листенеров тоже пишет в окно интерпретации.
Внутри списка два листенера Listener: DefaultTraceListener Listener: LoggingTraceListener Мне надо один из них удалить? А если там пишется что-то еще? Сечас я сделал костыль, типа логгер записывает на уровне дебага (т.к. в окно интерпертации попадает всё начиная с Error), но текст помечается как ошибка Log.Debug("[ERR System.Windows.Data] " + message); Но чет хуйня какая-то.
две надуманные проблемы 1 а зачем ловить Information? Ты ж ошибки просил ловить. В общем то только ошибки и нужны.
2 outout что ли? ну туда сам бог велит писать. Как бы оно для этого и придумано. (тем более что у впф даже консоли нет куда можно было бы еще вывести). В конечном использовании продукта никакого output не будет же. Но даже если туда срет дважды, то смотри пункт 1 - то есть пофиксил ошибку и все чисто красиво.
>>2688040 Первый пункт меня не особо напрягает. Решил просто просить.
>Но даже если туда срет дважды, то смотри пункт 1 - то есть пофиксил ошибку и все чисто красиво. А как это может пофиксить? Смотри, серилог имеет два варианта вывода сообщения, у каждого свой левел .WriteTo.Debug с LogEventLevel.Error - вывод в окно интерпертации .WriteTo.File с LogEventLevel.Debug - вывод в текстовый файл
В итоге у меня в окне интерпретации сначала выскочит это System.Windows.Data Error: 4 : Cannot find source for binding with reference ... Затем это [ERR 13:22:31:530 System.Windows.Data] "Cannot find source for binding with reference ... В текстовом файле, соответственно, будет только последняя строка
Первую строку срет какой-то дефолтный листенер, а вторую — серилог из моего листенера.
>>2688078 никак ты это не пофиксишь. лично я не знаю как отменять дефолтный вывод. И сильно удивлюсь если это возможно ибо это противоречит самой идее отладки.
разве что попросишь серилог не какать туда сообщения от этого листенера.
>>2687568 >В этом и есть основной смысл Ну да, это имеет смысл, когда дочерний контрол находится в том же XAML документе, что и родительский, тогда я могу использовать что-то вроде этого
Здесь Child учитывает контекст данных родителя и видит всю внутрянку Main_ViewModel.
А если я делаю еще один UserControl и вставляю его с грид? В дата контекст UserControl лезет неведомая залупа, которую он не ожидает видеть внутри. Он делался отдельно от всей этой параши, он не знает куда его всунут и что туда прилетит. Как мне установить защиту в таком случае?
Что я делал раньше? Внутри юзерконтрола создавал свой собственный проперти, который и названием и типом сообщал что он хочет получить в себя, и уже он перенаправлял инфу в контекст данных. В итоге получается так, что в контекст данных сначала прилетает какая-то залупа, вызывающая тонну ошибок привязки, а уже потом данные нужного типа.
>>2688490 А, я сам обосрался. Отмена. Вот же долбоеб.
У меня когда проперти обновляется, то я из метода OnPropertyChanged кидаю данные в дата контекст, вместо того,чтобы дата контекст связать с проперти DataContext="{Binding RelativeSource={RelativeSource Self}, Path=TestProperty}"
Тогда автоматический биндинг датаконтекста к родительскому датаконтексту разрывается.
Чет меня начала пугать эта автоматическая привязка дата контекста. А что если у меня 50 вложенных элементов по типу матрешки? Один элемент вложен в другой, а тот вложен в третий ... Будет цепочка из 50 привязок?
Вместо того, чтобы обратиться по имени к предку, будет пройдена вся цепочка? А если я вырежу дочерний контрол и снова вставлю? При первых тестах, привязки слетели.
>>2688490 >В дата контекст UserControl лезет неведомая залупа, которую он не ожидает видеть внутри значит раз он не знает ничего, то ему и нечего быть там куда его запихивают
>Он делался отдельно от всей этой параши, он не знает куда его всунут и что туда прилетит Не его проблема знать что прилетит. Он знает про то, про что знает - и уже забота впихивающего контролы куда попало впихнуть и нужное контролу.
>>2688641 Лично я не знаю как себя ведет DataContext контрола если вставить его из кода в другой контрол, но ожидаю что он унаследует DataContext места куда вставлен (в момент вставки, то есть смены родителя) и привязки обновятся. Но я не проверял и не сталкивался - я не знаю зачем об этом вообще думать и что то делать в коде такого рода, а именно создание контролов и ручное распихивание.
Сорре за тупой вопрос но только вкатываюсь в Visual Studio. Вот создал я консольное приложение. Как мне видеть результат выполнения моего Hello World в консоли? Использую 2022 версию
>>2689168 Норм пацаны в студии только непосредственно сам шарп код в студии хуярят. Ну может еще джейсончики по быстрому если поправить. Всю остальную xml, yaml и т.д. муть лучше отдельно в VSCode делать, так быстрее и удобнее.
>>2688693 >значит раз он не знает ничего, то ему и нечего быть там куда его запихивают Он знает, но пользователь не знает. Все что он видит - DataContext типа object. Он либо должен лезть в мой код моего юзер контрола, либо я должен на лбу у него написать, какого рода хуйню ожидает мой контрол в качестве данных.
Внутри на уровне xaml у меня нет никакой защиты от неверных данных и нет никакого способа подсказать, что юзерконтрол ожидает.
>Не его проблема знать что прилетит. А кто знает? Пользователь не знает, контрол не знает. Зачем придумали строгую типизацию, интерфейсы? Почему бы не пихать все в Object?
Салют, дотнетогоспода. Вопрос такой: как у C# с IoT? конкретно интересует взаимодействие с умными розетками и роботами-пылесосами, хочу с определенной периодичностью через крон-выражения их запускать, есть такая возможность?
Так, с дата контекстом я разобрался. Действительно, при перемещении из одного контрола в другой, автоматом происходит перебиндинг дата контекста. С этим проблем нет.
Но тут возникла другая проблема — ебаный попап.
В чем суть: в попапе есть Panel, которая выполняет функцию отображения списка в стиле плиток, эта панель биндится к нашему любимому дата контексту. Дело в том, что при сворачивании попапа (т.е. .IsOpen = false;) регистрируется диспоз итемов списка, но сами итемы не удаляются из панели. И если снова развернуть попап, то висят те же экземпляры.
НО, если я перед сворачиванием попапа перемещу Panel куда нибудь во временную переменную, то у меня в DataContext приходит null и итемы не только диспозятся, но и сама панель очищается. Соответственно, когда я помещаю панель обратно в попап, то присходит персвязывания с дата контекстом, который не пуст и итемы спавнятся заново как и должно быть.
Шо за хуйня? Что этот попап себе позволяет? Когда я делал тривью, то у меня при разворачивании ноды создавались суб-ноды, а при сворачивании - удалялись. Тут же какая-то хуйня на полшишечки. Связано ли это с тем, что у панели отсутствует виртуализация? И как с этим бороться?
Сап dota2net Есть вопрос касательно jwt аутентификации. Вот есть авторизация через jwt и нужно, что бы она всегда вызывалась, но не кидала ошибку unauthorized. То есть может быть запрос с токеном и без токена, но если пришел токен мы его проверяем. Придумал общее решение указывать два атрибута [Authorize(моя_схема)] и [AllowAnonymous] и проверять по контексту его аутентификацию. Это работает для обычного контроллера, но если мы используем какой либо пакет который сам выставляет и конструирует ендпоинты то это уже не работает. Собственно можно ли без атрибутов такое сделать ?
>>2689611 Регни обработчики и поставь брэйки. Если залетит то ты накосячил с интерпретацией данных.
К примеру так ловил протухший жвт в эллоуанонимус методах (логика некоторых зависела от того аутентифицирован юзер или нет) что бы юзера заставить рефрешнуть токен
>>2689380 >но пользователь не знает >Пользователь не знает, контрол не знает программист знает - ведь именно он знает что контролу надо в DataContext. Это видно после первого пробного запуска. А если он не знает, то пусть на завод идет.
>Почему бы не пихать все в Object Потому в WPF активно пихается. Там очень много рефлексии и поэтому о проблемах типов узнаешь в рантайме.
>>2689516 >Дело в том, что при сворачивании попапа (т.е. .IsOpen = false;) регистрируется диспоз итемов списка, но сами итемы не удаляются из панели. И если снова развернуть попап, то висят те же экземпляры.
да, есть такое во-первых, он кривой. приходится использовать нагугленное вроде NonTopmostPopup во-вторых, он при закрытии вызывает событие unloaded у содержимого, но само готовое содержимое просто прячется, то есть ведет себя как collapsed и при втором открытии никакого повторного связывания DataContext не происходит.
А значит минимум тебе нужно а) у попапа при закрытии чистить DataContext=null б) при открытии устанавливать DataContext иначе при втором открытии у тебя будет пусто.
Имеется ввиду ручной биндинг, типа "new Binding ... бла, бла, бла ... SetBinding"? А с ним нет проблем типка как с ручной подпиской, которую потом надо удалять при диспозе?
>>2689892 > DataContext=null отличается ClearBinding? биндинг это одна привязка. DataContext - источник привязок и он каскадно обнулит все биндинги
искать нужный биндинг в Child попапа - дело неблагодарное.
то есть содержимое попапа при закрытии никуда не девается (считай collapsed) и смотрит на тот же вьюмодель со списком. И далее нет разницы - обнулишь ли ты датаконткст или вьюмодель со списком изменишь - это затронет биндинги.
>>2689905 Предположим пикрил цепочку связей датаконеткстов. Точка С в цепочке — это попап. Понятно, что D, E, F обновятся, при этом связь продолжит существовать, но что произойдет со связью B-C? Она разорвется?
Я не понимаю поведение биндингов когда в их работу что-то вмешивается. Они продолжают существовать, но не работают из-за разницы данных, или биндинги уничтожаются?
>Разве надо? Не надо Ну есть же сильная и слабая подписка. При слабой подписке типа то что делается в WPF <Button Click="Button_Click" /> все очистится само собой, а сильная подписка может мешать сборщику мусора.
Посоветуйте книжку, шобы про кишочки рассказывалось, шобы на грани с компьютерсайнсом, шобы в контексте шарпа.
Из хорошего, что понравилось Управление памятью Коксы и у Сидристого в DotNetBook парочка годнейших глав встретились. Ну Рихтер, разумеется. Еще какую-то пробовал начинать, но бросил, ни названия ни автора не запомнил, помню только, эта книга когда-то в шапке этого итт треда фигурировала.
>>2689981 >Предположим пикрил цепочку связей датаконеткстов. Нет цепочки датаконтекстов. Есть наследование 1 ничего не делаешь и неявно наследуешь контекст что у родителя 2 делаешь новый контекст из родительского путем DataContext="{Binding на что то в родительском
При смене DataContext все контролы которые не определили свой контекст получают этот новый контекст (наследование). Все биндинги становятся неактуальными (источника биндигов больше нет, пришел новый). Mode=OneTime не имеет значения, ведь меняется не свойство куда привязан биндинг, а вообще весь источнк и биндинг к несуществующему более источнику лишен смысла. А значит и биндинг который рождает новый датаконтекст для группы 2 тоже пересоздается заново на новом контексте, тем самым затрагивая и вторую группу
Даже такой биндинг {Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.<prop> должен реагировать на смену DataContext (хотя я и не проверял ни разу, а вдруг нет, я не очень понимаю как себя ведут такие вот биндинги с путем на уровень ниже. Возьми и проверь)
Биндинги, которые не завязаны на меняемый DataContext (с его наследованием) - им похер на его изменение.
>При слабой подписке типа то что делается в WPF <Button Click="Button_Click" /> все очистится само собой, Это сильная подписка. Это эквивалент this.Click+=Button_Click в конструкторе. Просто такая подписка не приводит к утечке памяти.
>>2689560 Да собственно тем и отличаются. Обычные пилят всякие sql решения и всякие аналоги. Облачники ебутся с облачными сервисами и интегрируют их в предприятие (и поддерживают потом)
>>2690131 Так это девопсы тогда. Разрабам самих сервисов, обычно похую где их поделия крутятся, на железе, в контейнере или облаке. Максимум они у себя конфиги настраивают под то, что скажет девопс и все.
Пацаны, а че у вас используется чтобы вести дев-документацию? Я вот просто у питонщиков подсмотрел MkDocs. Вроде норм. Но типа блин. Все равно немного инородно. Может быть знаете что-то такое же удобное, но ближе к шарпу?
>>2690101 А как мне эту наследственную связь восстановить, если я тому же дата контексту C присвою null? Я имею ввиду состояние, когдя я мог бы обнулить дата контекст B, и это бы обновило C, D, E, F.
Если я просто скопирую из B в С, то обновятся D, E, F. Но если я изменю B, то это никак не повлияет на дочерние элементы т.к. в С будет тупо ссылка на вьюмодель.
Остается только создание ручной привязки, так? Или есть какой-то еще вариант?
>>2690319 >Пацаны, а че у вас используется чтобы вести дев-документацию? Ее осуждают. Типа возможность вести питоновскую документацию снижает энтузиазм писать понятный код, внятно именовать параметры, делать предсказуемое поведение и прочее.
>>2690414 да тупо в code-behind popup.DataContext = ... перед открытием и после закрытия. можешь попробовать сделать атачед проперти, который сохранит контекст и будет его восстанавливать.
>Если я просто скопирую из B в С, то обновятся D, E, F. Но если я изменю B, то это никак не повлияет на дочерние элементы т.к. в С будет тупо ссылка на вьюмодель. ты лезешь в абстракции "яйца и бабушка". То есть вроде верно, но не нужно. Я не знаю как там у тебя - обычно то проблемы нет. Есть вьюмодели, есть зависимый попап. При выборе допустим другого SelectedItem данные для попапа перестраиваются. Ок, возможно у тебя это крайне тяжелые операции и они должны быть lazy до реального открытия и очищены после закрытия. Значит в code-behind на события открытия закрытия достаем вьюмодель из DataContext и просим ее подготовить (заполнить список плиток) и очистить потом данные (очистить список плиток). Вьюмодель просто будет менять свое состояние, а обо всем остальном позаботятся биндинги. Можно оформить как бехавиор или атачед если очень хочется. И в общем то так не меняется DataContext потому и "разрыва связи" не будет.
>>2690492 >popup.DataContext = ... Что именно? popup.DataContext = popup_parent.DataContext?
1. Тогда у меня будет храниться ссылка на экземпляр вьюмодели. А теперь представь, что в дк базового предка поступает новый экpемпляр вьюмодели, а в попапе останется старый. И в моем случае это важно.
2. Если я что-то сделаю с дк родителя (как мне захотелось сделать это с попапом), а контекст дочерних элементов не обновится, а потом ищи почему не работает.
А что если контент попапа тупо переместить во временную переменную и потом вернуть обратно? Изначально у меня так и было. Надо посмотреть про атачед проперти.
>>2690584 ну вот и не мучай жопу, а при закрытии попапа попроси вьюмодель очистить данные (хоть банальное Items,Clear() и все вьюхи итемов отвалятся) что то делать при открытии - это если тебе нужно.
атачет пропа - просто способо оформить "по красоте", а не является необходимостью.
>>2690422 >>2690415 > Ее осуждают И как тогда другим разработчикам передавать всякие договоренности? Ну, типа решили мы что надо время в UTC хранить. Или там, что никаких Json.Net. Что енумы передаем и храним в базе как строки. И т.д. Каждому вновьприбывшиму - все это рассказывать? Так веть 100% чет забудешь, а обнаружишь только при PR'е или вообще в проде.
>>2690415 >Ее осуждают. Типа возможность вести питоновскую документацию снижает энтузиазм писать понятный код, внятно именовать параметры, делать предсказуемое поведение и прочее. Вот питонисты, это последние ребята на которых я бы ориентировался. Эти долбоебы сделали одно из самых хуевых решений в дизайне ЯП, только из-за того, что им лень было пару скобок поставить. Ясен хуй, что им доки лень будет писать.
>>2690319 Стандартом минимум является xml-документация. Хотя бы api в веб сервисах или публичные интерфейсы в библиотеках должны иметь xml описание. Т.е. то, что можно прокинуть в OpenApi. Остальное на усмотрение мейтенеров и соглашений команды.
Если же иметь в виду полную документацию к сервису, то все зависит от владельца сервиса, что и как у кого настроено. Стандартные варианты: - jira + confluence - redmine - youtrack - какие-нибудь кастомные вики сервисы - тупо в гуглдоках - вики в репе (гитлаб, гитхаб, битбакет) - еще какая-нибудь хуйня.
Каждый из этих способов позволяет (при наличии прямых рук у админа/девопса) достаточно плотно связать доки и базу знаний с кодом (ветки, коммиты, файлы и т.д.), при этом держа их отдельно. Ну и работать будешь ты с тем, с чем тебе скажет работодатель. Что-то свое можно пропихнуть, только если на проекте ничего нет, либо твой вариант будет в разы лучше.
Система docs-as-code (в том виде когда доки хранятся непосредственно в коде/репе проекта), обычно редко применяется. Т.к. в большинстве случаев доки должны шариться не только среди разработчиков, но и тех у кого нет или не должно быть доступа к коду. Поэтому их разделяют.
Еще один вариант который часто применяется - юнит тесты. Т.е. помимо тех тестов которые контролят код, добавляется блок который создан исключительно для демонстрации возможностей проекта/библиотеки. Достаточно удобная штука на мой взгляд.
Алсо, для своих петов рекомендую использовать самый простой способ (помимо xml-доков) - обычный markdown. По факту это просто текстовые файлы, которые будут нормально отображаться в любом git сервисе (гитлаб, гитхаб и т.д.), их легко можно читать где-нибудь в браузере или VSCode, либо заюзать обсидиан.
>>2691614 Угу и именно по этому им пришлось придумывать свой Pepe8, потом сраться из-за него. Это не говоря о том, что часть питонистов мечтают вернуть скобочки взад. Для заметки. Сам по себе язык неплох, я его пробовал. Но решение сделать элемент форматирования (причем такой неоднозначный), частью синтаксиса языка - одно из самых ублюдочных решений в истории дизайна языков программирования.
>>2691650 Есть. Но либо в виде аутсорса, либо по очень хорошему знакомству и рекомендациям. Стандартные говнопроекты, которые можно было бы спихнуть на биржу, на WPF практически никто не делает. А к серьезным левого человека с улицы подпустят.
>>2691925 >этому им пришлось придумывать свой Pepe8 Да. Потому что скобочки - далеко не все особенности кода где можно наделать говна. И автоформатерам нужно на что-то опираться. Но зато меньше возможности говна наделать в скоупах
>- одно из самых ублюдочных решений Сколько людей столько и мнений.
Почему студия упорно игнорит мой .editorconfig файлик, при этом vscode - нормально подхватил. Больше всего-то триггерит именно что студия опять же упорно пытается сохранять не в UTF, а в кириличнской кодировке, а потому - на выходе получаю, что другими редакторами если открывать - вижу ромбики(((
>>2692317 А куда ты его кладешь? Он должен лежать или вместе с солюшеном, или в каталоге проекта, тогда вижла его автоматом должна подтягивать при загрузке проекта. Если он там и лежит, то попробуй напрямую добавить его в солюшен. Solution > Add > Existing Item Сам по себе файл у тебя вроде норм.
>>2649578 (OP) >>2649578 (OP) Аноны, помогите разобраться с добавлением новой строки в dataGridView. Есть таблица с определенными столбцами, хочу реализовать следующее: после заполнения текстовых полей и нажатия кнопки добавить, в таблицу будет добавляться новая строка и заполняться соответствующие ячейки новой строки. Легко и просто реализовал это в Qt C++, а здесь нихуя не получается. Надо что-то вроде аналога insertRow. А может как-то по-другому.
Нулевой далбоёб врывается ИТТ. Только начал щупать C#. Подскажите, есть ли способ в vscode сделать так, что бы при сохранении файла с кодом, у меня проект автоматом билдился и запускался?
Если у меня будет делегат на статический метод класса, то экземпляр класса все равно будет висеть неудаленным GC? Или все же статика в данном случае играет роль?
>>2695387 Неправильно. Линку - это просто сахарок, чтобы ты мог запросы единообразно составлять при работе с разными источниками данных и соответственно колекциями. Ты можешь вообще его не использовать. Допустим, ты пишешь библиотку, которая в памяти генерирует картинки. На кой хуй тебе там линку?
Посоветуйте плиз минимальный список технологий для вката. На данный момент знаю синтаксис шарпа только и фронт (тайпскрипт, реакт и прочее). Вкатываться буду либо в фулсталкинг либо в бэк
>>2695405 >>2695388 Я начал с задачек на кодворс, что бы привыкнуть к синтаксису и заодно апи языка пощупать, так любые манипуляции с данными, тебе в ебало ошибка, что нет такого метода без Linq. Ну и постоянная конвертация массивов в списки и т.д и наоборот - это норма?
>>2695436 Чел. Вот все что есть в линку https://learn.microsoft.com/ru-ru/dotnet/api/system.linq?view=net-7.0 Ессно, что если ты чет отсюда тащишь - у тебя будут ошибки. Сам по себе - линку это такая хуйня, для того чтобы единообразно писать запросы. Возникла во времена, когда все любили ЭссКуЭль, и не любили велосипедить под всякие XML, грабберы HTML и прочее придумывать.
Ну так вот. Майки в то время почесли голову: все любят ЭссКуЭль, давай запихнем в язык ЭссКуЭль подобную хуйню. Собственно и ввели: var razpolbanniePezdii = from p in pezdii wher p.State == "Раздолбана" select p;
Чтобы с этим вот работать дальше - пришлось наворотить всякие методы расширения.
>>2695446 Многие вещи таки именно в линку синтаксисе - выразительнее и проще делаются. Типа вот если тебе объединить две коллекции разнотипные и потом - выдать результирующий объект. Экстеншинах - это такой уебищный синтаксис, что я ебал. А на линку - красивенько-удобно. Единственный минус линку, в том, что нельзя сделать так:
IEnumerable<IPosibleOwner> dogs = from x in dogTypes from y in person where y.Like == x.Name select new {y.id, y.Name, Prefer = x } Приходится городить класс еще или сейчас рекорд. А было бы удобно, чтобы был анонимный тип, но с интерфейсом. Пусть и с ограничениями.
>>2695445 Просто я пока столкнулся с парой банальных задач с массивами цифр и, что бы их решить надо массив конвертнуть в IEnumerable (а это уже часть Linq, как я понял), потом сделать необходимые махинации (поиск/сортировка/ревёрс и т.д), а потом надо опять конвертнуть в массив и вернуть значение. И в связи с этим вопрос возник, такой флоу - это норма для шарпов.
>>2695456 >IEnumerable Это интерфейс. Если начнешь гуглить, то тебе так нассут в уши, шо долго будешь отходить.
Когда ты дальше начнешь учить шарп, то рано или поздно ты столкнешься с такой проблемой, что у тебя будет несколько разных классов, которые по своей сути одинаковые, но для каждого придется писать свой собственный метод и это очень неудобно.
К примеру есть массивы, есть списки, есть коллекции. Мы понимаем, что что-то в них всех есть одинаковое — что-то, что присуще им всем, например количество элементов внутри, или свойство получения итема по индексу. Но когда мы начнем делать условный метод сортировки, то мы не можем знать что в этот метод подадут: массив, или список, или что-то еще. Даже если знаем, то не всегда получается соблюдать один тип, и рано или поздно нам придется писать метод сортировки отдельно для массива и отдельно для списка. А если у тебя таких типов сразу 10 или 100? Для каждого писать отдельный метод? Ебануться можно.
Умные ребята придумали интерфейсы. Если рассмотреть это совсем просто, то это некий свод правил для класса. Интерфейс как бы говорит "я не знаю что за класс ты там собираешься делать, но у него должны быть методы Count, IndexOf, Max, Min и т.д.". Таким образом твой класс как бы унифицируется. Обычно говорят, что класс реализует интерфейс, т.е. реализует список требований интерфейса.
Array реализовал интерфейс IEnumerable List реализовал интерфейс IEnumerable Поэтому мы можем их привести к интерфейсу IEnumerable, как бы абстрагируясь от всего лишнего, и получить метод Count (которого у Array нет, а через интерфейс есть). Теперь мы можем создать ровно один метод сортировки, который принимает IEnumerable и пихать в него и массив, и список, и все что угодно, что реализовало интерфейс IEnumerable.
Понятно? Это не конвертация. Мы не создаем что-то новое. Линкью требует IEnumerable просто из-за универсальности, чтобы ты мог применить это и к массивам, и к спискам, и к коллекциям один и тот же метод. Только и всего.
>>2695536 Ты вот это дерьмо отбрось и для начала попробуй создать обычный метод который тупо циклом проходит по всем итемам и выводит его на экран. Но есть одно условие: метод должен обрабатывать как для Array, так и для List.
В не лезь в залупу (простите за каламбур), тебе рано линкью. Столкнись с проблемой, а потом возвращайся, будем тушить твою жопу.
>>2695548 Ну вот навоял. С перва думал, что у Array и List у обоих свойство Length есть, а нихуя, у List есть Count, но с ним надо ещё 1 вычитать. public static void Iter(IEnumerable<int> item) { var enumerator = item.GetEnumerator();
while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); } } >>2695568 >>2695565 Ладно, ладно. Просто не привык к такому поведению метода. Мы, жаваскриптизёры, одноклеточные, имейте терпение.
>>2695583 А хули мне запрещено разные типы в функцию передавать? Тоталиторизм. >>2695586 Теперь вижу, что можно через обычный фор. Count есть и у массива и у листа. Не замел сразу Count у массива.
>>2695581 >А не, я перебирал i < list.Count() мне выкинуло ошибку, что i вне ренжи списка. Багануло, видимо.
Это не баг. Count и Length это не максимальный индекс, это подсчет количества итемов в списке. А так как индекс массивов и списков начинается с нуля, то здесь {0, 1, 2, 3, 4} Count и Length будет равно 5, а максимальный индекс равен 4, что на единицу меньше.
>>2695586 Ок, как решать эту задачу без изворотов? Тайпскирпт научил меня одной мудрости если драка не избежна..., void Iter<T extends (общий тип для Array и List)>(T item){ }
У вас так же можно определять тип аргумента, что бы можно было разные типы использовать или у вас другой способ, или у вас вообще нельзя, что бы один аргумент мог быть разных типов?
>>2695590 >А хули мне запрещено разные типы в функцию передавать? Потому что они внезапно разные. Откуда методу знать, что класс типа HuiPizda такой же как класс типа VrotEbis? Вот для этого и служат интерфейсы — они сообщают, что у обеих классов есть интересующий метод или свойство.
> Не замел сразу Count у массива. Потому что твой метод смотрит на массив через призму IEnumerable, который ты указал в параметре public static void Iter(IEnumerable<int> item)
>>2695590 > Count есть и у массива и у листа Опять мимо, это МЕТОДЫ не листа/массива а экстеншен к enumerable со всеми неприятными вытекающими (хотя есть некоторые оптимизации внутри)
>>2695597 Да, можно. Это дженерики. Ты написал практически так, как это есть в шарпе. Но это не работает для перечислений типа массива или списка. Для этого нужно юзать интерфейсы. Дженерики нужны немного для другого.
В твоем случае это выглядит так void Iter<T>(IEnumerable<T> item){ }
Здесь дженерик позволяет сделать универсальным тип итемов массива. Если у тебя будет на входе массив не int, а что-то string к примеру.
Почему эта ошибка возникает при попытке создать файл БД? Тут мне даже ГПТчат не может помочь, хуйню только советует, которая сыпет ошибками. Сама реализация создания нового файла происходит в "создатьБДToolStripMenuItem_Click". https://hastebin.com/share/ufatadiweb.php
Привет Я тут мечусь между шарпом и пыхой. С одной стороны куча работы, а с другой крепкий многогранный яп. Есть некоторый опыт фронта. В общем чтобы легче определиться я делаю небольшой анализатор логов сервера. На пыхе сделал, впечатление получил. На очереди Шарп) Скажите, ссылок на Майков и их учебник достаточно, чтоб ознакомиться с азами и потом распарсить лог и вывести его в веб страничку? И получу ли я то самое представление о языке? И вообще их курсы толковые или чисто для галочки?
>>2695636 Бери Шарп. После него на пыху переключиться будет вопросом синтаксиса (учится за неделю) и фреймворка типа ларавеля (учится за 2 недели). Остальное все равно смежные области типа SQL, докеров и прочего говна. Все равно не узнаешь куда тебя кривая уведет. Я вообще с джавы начинал вкатываться, а вкатился тайпскриптером сишарпистом лол.
А что по поводу обучения. У майков учебник для галочки? Да и вообще с чего начинать? Блин пыха конечно не кисло обросла информацией, у Шарпа с этим попечальнее)
>>2695649 не смешно. А что смешного? Какая проблема знать шарп и любой другой (или 2+) языка? а никакой. Тот же фулстек знает шарп и богомерзкий жс (а еще и тайпскрипт сверху) - и ничего, жив (только страдает ибо фронтенд говно)
так что знать шарп и хотя бы питон (пхп же ужас) - изи.
Туториал старый но после него новые фичи на лету схватывать будешь. После этого БД смотри. Реляционные, нереляционные и почитай про SOLID. Дальше уже разберешься
Спасибо парни. Я любитель по реальным задачам изучать. Есть у вас на примере какие-то репы с чистым кодом реализации какого-то говна типа студентлист, телефонный справочник и прочее говно?
Продолжаю решать кодворс, и ловлю жесточайшее дежавю с тем, когда я решил посмотреть питухон так же, решая кодворс. Решаю задачу, перебираю строки/массивы, ифы хуифы, а чуваки просто подключают библиотеку (пускай дефолтную из System) и всё. namespace Solution { using System; using System.Net; class Kata { public static bool is_valid_IP(string IpAddress) { return IPAddress.TryParse(IpAddress, out var parsedIp) && IpAddress.Split('.').Length == 4; } } }
>>2696161 суть статической типизации - тип должен быть известен на этапе компиляции, а не вот это всё. Рефлексия может всё, но на этапе компиляции тебе придется указать тип object и потом в рантайме с этим жить. Еще там есть dynamic но все же тут вам не пхп
>>2696178 >но на этапе компиляции тебе придется указать тип object Сразу же после создания экземпляра, я сделаю каст к интерфейсу и дальше буду делать нужные мне делишки, ну или не буду делать, если каст неудачный.
Мне нужна команда (ICommand), поэтому не могу сделать дженерик метод Execute<T>, иначе будут траблы с WPF биндингами. Я буду вынужден сделать целиком дженерик класс, а это пизда, это говно хуй куда впихнешь и хуй откуда выпихнешь. Там столько геморроя, что ну его в пизду.
Можно ли сделать так, чтобы компилятор сразу понимал, что тип, реализующий мой интерфейс совершенно точно имеет конструктор и не писать ограничение new() при каждом использовании данного интерфейса?
public class MyGenericClass<T> where T : IElement, new()
>>2696766 >А потом деанон? А что беззубый двач может сделать в 2023-м году? Особенно в тематических тредах, где все друг друга знают чуть ли не по имени и фамилии.
Привет, программач. Начал учить C#, пока дается относительно легко, т.к. в школе задрачивали питоном для огэ/егэ. Начал читать "C# Для чайников", но столкнулся с тем, что около половины не понимаю/понимаю плохо, но да похуй, не в этом суть.
Вопрос вот в чем, шарпы используются в вебе, играх и приложениях. Душа у меня к вебу вообще не лежит, ближе к играм или приложениям(желательно играм), насколько сложно найти работу и сколько примерно займет изучение БАЗЫ для этогоу среднестатистического вкатуна?