Сап, дотнетач. Понадобилось мне тут обработать ~10000 картинок, решил написать одноразовую программулину на C#. Делаю все как обычно, последовательно по одной картинке за раз (распараллелить тут нельзя, ибо манипуляции с каждой следующей картинкой зависят от предыдущей + рандом):
Далее произвожу нужные мне манипуляции с Bits, делаю Bitmap.Save, и после сохранения освобождаю GCHandle и все ресурсы. Но возникает проблема - программа правильно обрабатывает и сохраняет примерно первые 3-5 тысяч картинок, и после этого на рандомной картинке на Bitmap.Save выдает мне "AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена". Все картинки имеют одинаковые параметры (размер, формат, битность).
Аноны, подскажите, куда копать? В каком месте память повреждается? И как она вообще может повредиться, если я выполняю все последовательно, и освобождаю все ресурсы строго после того, как они перестают использоваться? Тем более, все это делается даже без unsafe.
Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу. Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня. Знаний самую малость, но не полный 0. Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов. Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.
Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу. Заранее благодарен тебе анон!
Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу. Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня, короче, вполную использовать API и т.д. Знаний самую малость, но не полный 0. Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов. Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.
Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу.
>>887274 > видео уроки Учить программирование по видеоурокам - то же самое, что и просить других людей пережевать еду за тебя, чтоб ты потом мог только проглотить. > книжки На русском всё устаревшее, на английском годная литература в основном только за бабло.
Всё это хуйня, ты так ничему не научишься. Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься. И да, вот этот >>887277 господин полностью прав - либо учишься искать нужную инфу сам, либо нахуй путешествуй отсюда.
>>887279 Двачую. Я сам начинал с C/C++. Си учил по Ричи, а кресты по Страусу. Плюс гуглил если что-то не понятно. Дальше все языки без книг учу и видео. Там слишком для начинающих объясняют. Не хочу каждый раз проходить переменные снова. Лучше так как ты сказал, Google+MSDN+SO и пилишь проект.
Для каких реальных кейсов используется dynamic? У меня такое ощущение, что он нужен только для того, чтобы любители динамикодрисни а-ля JavaScript чувствовали себя как дома, кладя хуй на всю систему типов.
>>887409 для совместимости с языками программирования без статической типизации. ну либо в случае, когда структура объекта может быть настолько разной, что аж плохо становится
Господа анонимные шарписты, где почитать про библиотеки?
Вот у меня есть самописный редактор уровней для самописной игры. Есть инструменты - кисть, ластик, селектор для работы со свойствами конкретного блока и создания связей, етц. Каждый такой инструмент - синглтон, наследующий интерфейс ITool. Я хочу каждый такой инструмент сделать дллькой, чтобы в коде это выглядело как-то так: foreach (var tool in toolDir.GetFiles(*.dll)) Tools.Add(tool.Name, tool);
Мне нужно узнать собственно про импорт и детали создания. Если просто создать новую библиотеку классов, сунуть туда все связанные интерфейсы и код из текущих классов, это будет правильно?
>>887787 > На первый взгляд, выглядит правдоподобно Это только на первый взгляд, на самом деле MEF - хуита лютая. Я хотел использовать в своем проекте, но, почитав доки и посмотрев примеры кода, решил, что нахуй это всё. Ограничился подгрузкой модуля через Reflection, куда быстрее и проще.
>>887928 Как можно не понимать один из самых простых языков программирования? Синтаксис самый что ни на есть классический, без новомодных выебонов. Каких-то подводных камней, на которых может споткнуться начинающий - нету. Возможностей во фреймворке куча на все случаи жизни, а если чего-то нет, то для этого наверняка есть сторонняя либа. Шарп - наверное лучший язык для вхождения в программирование, а ты его не понимаешь. Странно как-то.
> Что почитать про юнит тесты, чтобы научиться их писать? Много раз слышал, но сам не пользовался.
Просто про юниттесты - книга roy osherove unit tests чегототам, в целом дает норм представление и многие моменты разъясняет. Толковый справочник xunit test patterns
По мне, юнит тесты дают максимум выхлопа при tdd. Мой путь был таков: Unit tests for fridy cats like me на pluralsight Еще пачка видосов от туда по этой теме, вплоть до курса марка симана Книжка growing object oriented software guided by tests - вот после нее все встало на свои места и теперь мне без test first жизнь не мила.
Уже год как вкатился в асп мвс. Каждый день я занимаюсь крудошлепством и ковырянием проекта, знания которого никак не помог мне при перекате в другую контору. Если бы это не разбавлялось фронтэндом и написанием тестов, я бы уже завыл от безысходности. Это вот так все и будет продолжаться? Когда начнется интересная часть? Про многопоточность могу не мечтать?
>>887254 >>887268 В общем, хотел расписывать ответы на вопросы, но таки нашел решение. Прежде всего напишу, что я не программер, никогда на него не учился, и это всё - чистое хобби. Так что возможно я просто не учёл какую-то особенность языка.
Сначала скажу, что я использовал не Bitmap, а класс-обертку (DABitmap) над ним, которая позволяет доступ к пикселям напрямую - получается доступ к массиву каналов без unsafe кода, LockBits, Marshal.Copy и прочей ненужной шелухи, при этом со скоростью того самого LockBits. Написал свои методы GetPixel и SetPixel, работаю с ними. Для обработки картинки я сделал функцию ProcessBitmap, которая изначально принимала и возвращала DABitmap, затем в вызывающем коде уже выполнялся Bitmap.Save. Всё работало прекрасно, однако прога стала сжирать память в больших количествах. На маленьких наборах картинок ещё всё отрабатывало, а на полном массиве, по моим подсчетам, ей понадобилось бы около 20 гигов оперативки. Я прогнал профайлером и обнаружил, что по какой-то причине те самые одномерные массивы каналов после использования продолжали оставаться в памяти, по ~2 мб на картинку. Я решил изменить функцию так, чтобы она принимала исходный DABitmap, и через ref обычный битмап, в который нужно возвратить результат. Прописал возвращение через Bitmap.Clone, затем вручную Dispose на используемые ресурсы. Пожирание памяти прекратилось, но стала выплывать проблема из >>887209. В итоге я решил ради теста не возвращать битмап, а сохранять его непосредственно из ProcessBitmap (вместо Clone), прямо перед диспозом. И, о чудо, всё вдруг заработало прекрасно. Я прогнал ради теста раз 20 на разных наборах картинок, ошибка перестала появляться.
Такие дела. Но мне всё же непонятно, почему вылетала та ошибка. Явно каким-то образом мой склонированный битмап исчезал из памяти раньше, чем успевал сработать Save, но как такое возможно?
>>888020 Как руководители определяют, на какой инфраструктуре сидеть? В 1с все шаблоны отчётиков готовы и бух функции написаны. Так чем шарп для предприятия лучше? (Как доказать работодателю, что оставаясь на шарпе, мы сможем большее? В чём наше конкурентное преимущество?)
Или иначе задам вопрос, каким компаниям выгоднее .net а каким 1c?
В Domain лежат сущности, сервисы и интерфейсы репозиториев. Этот слой ни от кого не зависит. Здесь реализуется только бизнес-логика.
-----
DAL - реализует интерфейсы репозиториев из Domain. Соответственно, от него же он и зависит. То, что ты пишешь реализации интерфейсов в отдельной сборке позволяет тебе полностью абстрагироваться от способа хранения данных, у этого есть свои плюсы: 1. Ты не думаешь понятиями EF или других механизмов хранения данных, когда пишешь Domain-слой 2. Ты можешь писать юнит-тесты для Domain-слоя, делая заглушки для репозиториев 3. Если приспичит, то можно без особой боли отказаться от EF (хотя хуй знает, зачем)
Отдельно стоит сказать, что в DAL слое у тебя, скорее всего, будут лежать дубликаты всех сущностей в виде DTO. Причина этого в том, что в Domain слое ты, по хорошему, убираешь часть сеттеров (например, у пользователя нельзя поменять id после создания). EF пошлёт тебя нахуй, если ты попытаешься создать сущность с отсутствующим сеттером и без конструктора по умолчанию (который без параметров). Поэтому тебе нужно будет маппить доменные сущности к DTO и обратно. Чтобы не писать тучу однотипного кода, есть готовые либы, можешь погуглить. Алсо, в этих DTO ты можешь использовать аннотации для описания схемы бд, типа [StringLength(200)]. Все эти DTO можешь пометить модификатором internal, поскольку кроме DAL-слоя о них никто не знает.
-----
Web, соответственно, зависит от двух верхних слоёв и делегирует исполнение бизнес-голики доменным сервисам. В контроллерах не должно быть никакой бизнес-логики. Только валидация, преобразования сущностей в DTO (например, тебе нужно в результате отдать данные пользователя в виде JSON, но ты не хочешь отправлять его пароль) и отправка результатов на выход.
Ахуеть, я на курсовых только формошлёпством занимался. Удачи тебе.
>>888364 Вроде все так. Только учти, что нижние слои не должны знать о верхних, что-то типо такого: Domain <- Repo <- Service <- Web т.е. доменка не связана ни с чем, репозитории знают только о доменке и т.д.
Посоны, EF рабочая технология или нет? Разве запросы не проще хранимыми процедурами написать? Энторпрайз уровень, EF видел только в простейших реализациях.
>>888422 Зависимость для контейнеров прописывается на уровне web-приложения как раз.
>>888426 Что тебе мешает вызывать хранимые процедуры из EF? Да и не все же ты на хранимках будешь делать. Где-то достаточно простого запроса с использоваие linq и EF, если даных не много. Зачастую мне кажется EF в тырпрайсе только по историческим причинам существует - когда-то запилили, ибо самый удобный инструмент был, а микро-orm небыли на слуху и не пользовались популярностей.
>>888422 IoC контейнер всего лишь управляет зависимостями. Например, у тебя есть сервис, который зависит от объекта типа IUserRepository. Ты хочешь скормить ему реализацию в виде UserRepository. При этом UserRepository лежит в другой сборке и напрямую ты от него не зависишь.
Для этого тебе нужно настроить твой IoC-контейнер. Ты пишешь либо в DAL, либо в Web-слое что-то рода: Bind<IUserRepository>().To<UserRepository>();
Всё. Теперь любой, кому понадобится реализациия IUserRepository, сможет её получить. Автомагия IoC-контейнера подставит репозиторий в конструктор для твоего сервиса.
>>888242 > Прописал возвращение через Bitmap.Clone
Наверное из-за этого ошибка была:
It is the common difference between a "deep" and a "shallow" copy, also an issue with the almost-deprecated IClonable interface. The Clone() method creates a new Bitmap object but the pixel data is shared with the original bitmap object. The Bitmap(Image) constructor also creates a new Bitmap object but one that has its own copy of the pixel data.
Using Clone() is very rarely useful. Lots of questions about it at SO where the programmer hopes that Clone() avoids the typical trouble with bitmaps, the lock on the file from which it was loaded. It doesn't. Only use Clone() when you pass a reference to code that disposes the bitmap and you don't want to lose the object.
>>887279 > На русском всё устаревшее, на английском годная литература в основном только за бабло. Все основные книги по шарпу из шапки переведенына русек, даже если не последнее издание ничего страшного в этом нету. > Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься. Знал я таких хуесосов, которые хвастаются своими еба проектами которые написали с помощью гугла и SO, но при этом даже не знают для чего используется ключевое слово static. Так что книги нужно будет осилить в любом случае для более глубокого понимания предмета.
>>888426 инфраструктура EF дает возможность писать те участки кода, которые зависят от обновления БД, но писать триггеры, самому высматривать что удалилось/изменилось/добавилось, возможность отсутствует
>>887276 > ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня Там что, умные вещи рассказывают? Посмотреть что-ли.
>>888536 > pixel data is shared with the original bitmap object Боже мой, ну вот нахуя они это сделали? Ещё и нигде про это не написано. От функции с именем Clone ждёшь совсем другого поведения.
Шарпаны, поясните за массивы vs коллекции. Как я понял, для повседневных нужд лучше использовать коллекции, особенно специфичные их типы: таблицы хешей, стёк и прочее. Для высоконагруженных задач обычные(особенно двумерные/зубчатые) подходят лучше.
> для повседневных нужд > особенно специфичные их типы охуенная логика
хэшсеты, стэки и прочее используются там, где нужны хэшсеты, стэки и прочее. для того, чтобы загнать некое множества данных от одного места в другое, обычно используют T[]/List, прикрывая все это IEnumerable. изредка появляется необходимость использовать нечто вроде IList, IReadOnlyCollection. в качестве коллекции, которую можно дополнить/урезать - соответственно List/Collection
Пацантре, как работать с соц.сетью, который не выдает свое API? Вернее, выдает его только охуительным разработчикам и т.д., а для моего говно-софта для разного рода спама его не получить. Какие варианты еще есть?
>>889057 Типа надо быть разработчиком с идеей охуительного приложения и готового шаблона, дабы предоставить этим пидоразам на проверку, а далее получить доступ.
Благодарствую за ответ. Но нет ли другого способа? Уточню пожалуй, что речь о instagram-е. Все же акцент хотелось бы сделать на эмуляцию действий с мобильного приложения, а не через их веб-калеку.
>>889062 Еще раз благодарствую и посылаю нахуй эту идею, знания не дотягивают, увы... Возможно вернусь через пару лет к этой идее. Кстати, меня в целом интересует всякого рода спам и т.д. Есть ли где-нибудь охуительная обучалка по POST/GET?
>>889070 Да, я и говорил о HTTPS запросах. Т.к. API мне не получить, а вся эта ебля с телефоном не для моего уровня, то можно для начала хотя бы попробовать реализовать через калека-браузерную версию.
>>889072 ну HTTPS - это HTTP + шифрование на уровне клиента самое сложное (как мне кажется) - это как раз с телефона декодировать что/куда/кому направляется т.к. тебе понадобится сертификат которого у тебя нет. либо колдовать над wireshark и ему подобными. но я тебе тут вообще подсказать ничего не могу благо, у браузеров есть Console/Network, где вся эта херня проходит без проблем. тут встанет вопрос, применим ли браузерный API к кему-нибудь, или придется парсить хтмл
>>889075 судя по всему - это как раз и есть имитация тыкания пользователем кнопочек в браузере. только мне сложно понять как оно распознает ответ сервера (ибо рнр), но не думаю, что там что-то революционно уникальное
>>889085 Для начала нужно переписать код с PHP на C#. Сколько примерно будет стоить такой заказ? Т.к. в PHP у меня знания только на базовом уровне, на начально-базовом.
>>889088 Ладно, проехали, ты и так мне помог аноняша. Накидай годных гайдов и т.д., дабы усилить свои знания именно для таких целей, разработка софтов онли для соцсетей и т.д. Какие-то определенные библиотеки может изучать, ну или пути, ну и т.д. Просто недавно только подсел на C#, общее понятие о программирование есть, лет 5 назад сутками напролет кодил, сейчас решил вернуться, только вот всю эту хуйню подзабыл, да и сейчас нужны знания онли для такого рода целей, спам и прочая хуйня в соц.сетях.
>>889291 это неправда как и то, что ms забросили winforms. конечно, не сказать, что это приоритетная разработка или хотя бы где-то в топах, но тем не менее
Друзья помогите пожалуйста новичку. В плане хобби\кучи свободного времени на работе изучаю .NET Хочу в итоге написать небольшое картографическое приложение для себя. Начал курить варианты настольных приложений - Windows Form, XAML. У меня вопрос, возможно некорректно поставленный, на какой технологии создано родное приложение "Карты"? В частности как реализованы вкладки и вот такого плана меню, как на скрине? Если можно подробней, материал по теме я сам найду. Вообще в чем имеет смысл из современных технологий приложений для десктопа разбираться?
>>889473 >В частности как реализованы вкладки и вот такого плана меню, как на скрине? Не понимаю твою огромную желтую мазню. Могу попробовать ответить если ты разобьешь это на несколько отдельных вопросов с отдельными картинками.
>>889339 Странное сравнение. Это ж разные программные платформы(UWP = mobile в котором возможности обрезаны ради безопасности end user'a, WPF = необрезанный .NET 4.6.*,).
>>889511 Как в окне приложения реализованы вкладки? В данном случае результат поиска "пик 1" отображается в новой вкладке "пик 2" + открывается информационная панель со списком объектов около этого адреса с возможностью ее свернуть либо перейти к информации о конкретном объекте "пик 3". Мне интересно на основе какой технологии в приложении я могу реализовать возможность открытия и работы в нескольких вкладках (в идеале конечно еще возможность вкладку выводить в отдельное окно, как в Edge например), а также реализовать подобные скрывающиеся меню.
>>889516 1 это не вкладки, а просто список(с горизонтальной ориентацией разве что, больше в нем ничего необычного не вижу). 2 это контейнер(какой-нибудь Grid или StackPanel) содержимое которого через binding привязано к выбранному элементу списка 1. Насчет того что он заменяет поиск: либо это просто 2 контрола размещены в одном месте и у них переключается видимость, либо сложный кастомный UI контрол с разными состояниями.
Шарпач поясни, есть необходимость подсчитать в коллекции кол-во элементов, удовлетворяющих условию. Как лучше всего сделать, через массив + счётчик или использовать метод Count от LINQ? Как вообще оценить нужность того или иного подхода?
>>889689 Это зависит от того, что тебе нужно. Функциональный стиль делает твой код более коротким, понятным и не оставляет шансов обосраться.
Сравни: int goodItemsCount = yourCollection.Count(x => x.SomeField == 42);
С этим: int goodItemsCount; for(int i = 0; i < yourCollection.Length; i++) if(yourCollection.SomeField == 42) goodItemsCount++;
Однако, за всё хорошее нужно платить. В конечном счёте, это влияет на производительность. Использование LINQ будет менее производительным, в сравнении с простым массивов и циклом со счётчиком.
Но, стоит сказать, что в современном мире все дружно кладут хуй на производительность в пользу читаемости. Так что best practices считается - "Всё пишем на LINQ. Если приложение тормозит, то замеряем профайлером. Если проблема в коде с LINQ, то перепишем его."
>>889689 оценить через О(н) и другие асимптотические показатели, как и всю алгоритмическую сложность/эффективность кода
.Каунт(предикат) будет работать через получение энумератора и инкремент счетчика при удовлетворении условия, так что конкретно в данном месте ты ничего кроме времени не потеряешь
>>889712 >if(yourCollection.SomeField == 42) Собственно, наглядная демонстрация того, как быстро можно обосраться с таким подходом. Я имел ввиду конечно же: if(yourCollection.SomeField == 42)
>>889689 >>889712 Кароч, сам потестил с помощью Stopwatch и пришёл к интересному выводу: чем массив больше, тем меньше разница ручного обхода с LINQ. Но обход ручками аж в 30 раз эффективнее на малых (кол-во элементов <1К) и всего в 2 раза на больших (>=100000).
>>889719 стопвотч в таких анализах не самое эффективное средство. вангую ты еще без прогрева дженнриков тратил,запуская линкью следом после итерации массива?
>>889729 во-первых, в первом случае ты захватываешь упаковку значения результата в Console.WriteLine, в подсчет времени выполнения
во-вторых, ты сравниваешь методы для int[] (который является фундаментальным типом) и IEnumerable<T> (который является а) хуй пойми чем для рантайма, б) является универсальным типом). и тут надо знать, как дженерики вообще работают: jit компилирует на ходу (если еще не сделал это) отдельный тип для всех ссылочных типов и по каждому на все значимые. следовательно, ты, вкупе со всем, загоняешь в подсчет времени выполнения еще интервал компиляции класса
отсюда напрашивается объяснение этому вот: > чем массив больше, тем меньше разница ручного обхода с LINQ если, условно говоря, компиляция типа и упаковка инта в кучу занимает 10 условных единиц времени, а обход массива из n элементов - n * 0.1, то, грубо говоря, на двухсотом элементе массива время выполнения обоих случаев выйдет в паритет
ну, и в-третьих - реализация IEnumerable<T>.Count(Func) выглядит так:
if (source == null) throw Error.ArgumentNull("source"); if (predicate == null) throw Error.ArgumentNull("predicate"); int count = 0; foreach (TSource element in source) { checked { if (predicate(element)) count++; } } return count;
тут мне сложно пока что давать этому оценку, бенчмарки for/foreach довольно сильно разнятся и говорить, что linq хуёв только из-за foreach, я бы не стал (а может быть и стал)
>>889741 он поэтому и оптимизирован потомушто используется везде, где только можно в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз. кому верить - непонятно никому, естественно
>>889740 какая нахуй сегодня разница в скорости foreach или for. Похуй на декларативность, foreach - тут тебе и рефлекция инклудет, и вся разная кошерность. Учитывая что в 99% на шарпе пишутся web решения, а значит и деплоятся на win сервах(кол-во решений на core умножаю на 0), вопрос о быстродействии отпадает сам по себе
Бля, аноны, я знаю, что у вас сейчас подгорит, но очень нужна ваша помощь. Дело в том, что я просто пиздец как хочу выучить этот язык, я, блядь, просто обажаю шарп! Но увы, синтаксисы я не знаю, общий подход также не знаком мне. Поэтому няши, я вас прошу не кидать в меня говно и подкинуть идеи, как нормально выучить шарп с нуля. Я готов днем и ночью вникать и делать, только вот решить не могу, везде советуют разное. Отдельная просьба, написать именно то, с чего вы начинали сами, ну или хотя бы лучшую книженцию для новичков по шарпу, можно и видео уроки, сайты и т.д. Буду вам очень благодарен!
>>890165 >я обожаю шарп >синтакис не знаю, общих подходов не знаю >хочу нормально выучить. Ты охуел тут на ноль делить? А вообще ты странный, в шапке указан большой список литературы, рассортированной к тому же. Посмотри для начала шапку, а потом уже сам поймешь.
>>890123 печально, но приходится работать с такими же гениями, как и ты. вас где-то в инкубаторе делают? откуда ж такой тотальный похуизм к тому, чем занимаешься
>>889744 >в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз. Это легко померить. В C# 2.0 разница точно была, по памяти примерно на 30% при проходе по массиву intов. Сейчас тот же код (у меня сохранился с тех лет) на C# 4.6 никакой разницы не показывает вообще. Кстати раньше и тернарный оператор был на 20% медленнее чем if else.
>>890165 П - практикуй, начни с лабораторок для студентиков. И - импровизируй, решай задачи максимально разными способами, от очевидных до самых ебанутых. Если не знаешь последних - ищи в интернетике по ключевым словам задачи. Толку от чтения книг без понимания зачем оно там всё так мутно расписано - нет. Решение задач создаст необходимость и возможно мотивацию при очевидном ощущении прогрессаю
>>890374 просто ты вчера прочитал про потоки и решил, что вот это не хуйня, а все остальное хуйня? тащемта все из мелочей складывается: идеально спроектировал синхронизацию потоков/данных, но проебал в работе с коллекцией/памятью - считай, зря время потратил
А есть охуенные документы по-типу autoit-овской? Там на русском все так охуенно написано, подача легкая, примеры также легкие, очень легко освоить новичку. Подобные доки для шарпа есть?
>>890392 Я не выучил, я его учу. Знал до него на среднем уровне Си - базовые навыки алгоритмов, дискретной математики, строения ПК и ОС имеются. В данный момент активно нарабатываю практику работы с LINQ + коллекции (оче удобно). Дальше планирую GUI(WPF) + сети (сокеты/хуекеты). Пидорю тестовые задания для джуниуров. 90% вопросов решаются правильным запросом в гугл и последующим переходом на англоязычный Stackoverflow. По книгам могу посоветовать следующий порядок: Троелсон -> Альбахари -> Рихтер. Учти, я говорю только про язык - навыку программирования можно научиться только пидоря код, читать паттерны/алгоритмику, искать схожие решение и снова и снова и снова пидорить код.
>>890384 В случаях оптимизации вопросов нету - ты прав. это я просто решил дополнить. Я просто к тому что есть более важные вещи чем сравнение for и foreach
>>890424 >>890426 ну можно поманяфантазировать и представить, что мы пишем кастомную коллекцию и соответствующий кастомный итератор, который оказался не структурой, а коллекцию перебирают по сто раз в наносекунду не зная, чем является foreach, IEnumerable<> и вся эта хуйня, можно так же нехило обосраться с утечкой памяти, потере времени на сборку мусора (в итоге загоняя временные объекты во второе поколение) не хуже этих ваших потоков
> есть более важные вещи чем сравнение for и foreach ну тут как посмотреть. вообще, субъективно для меня интереснее зарыться в, казалось бы такое примитивное и очевидное говно, как стукруры vs классы, реализация интерфейсов, перебор коллекций. нупотомушто какие вопросы с многопоточностью являются вот такими, грубо говоря, совершенно неожиданными вещами? ты либо знаешь, либо не знаешь. оно либо работает, либо не сработает потому, что ты еблан. либо new Thread().Start() ибо итак норм, либо более адекватные методы
Загорелся желанием изучить Шарп, скачал видяхи ITVDN и начал смотреть лысого. Так вот, первые уроки зашли на ура, но вот дальше началось байтоевство, которому мне на данный момент нахуй не нужно. Поясните за байты, стоит ли все же вынудить себя выучить эту еблю, или можно смело менять обучение на другие уроки и книжки, где нет байтоебства?
>>890495 хотя, массив в тыщщу миллиардов элементов это вам не это. проще было бы уже один массив на 100 элементов прогнать четыре-пять раз дабы не допустить его попадание в LOH
>>890454 > button99_Click > richtextbox > однотипные функции, наполовину состоящие из повторяющегося кода Фу, блядь. И этот человек ещё рассуждает о внутреннем устройстве языке. Самому то не стыдно такое выкладывать?
>>890495 Чтобы меньше памяти жрать и дольше выполнялось, для более высокой точности оценки, т.к. tickcount имеет минимальный шаг 16 мс.
>>890622 >Самому то не стыдно такое выкладывать? Нет. Это отдельный проект который только и состоит из таких мелких функций, всё назначение которых это сделать один тест и получить результат и больше не его никогда использовать. Нет никакого смысла делать что-либо легкочитаемым, поддерживаемым и тому подобное, т.к. никакая поддержка и чтение вообще не подразумевается. Вы ребята слишком увлеклись быдлокодингом, и наверняка каждый тестовый код делаете с паттернами, осмысленными именами и прочей поебенью, и ставлю анус что в серьезном проекте несмотря на всё это обосретесь и сделаете его трудноподдерживаемым в итоге.
Кстати там достаточно интересные тесты есть. Например int? работает в разы (если не десятки) раз медленнее чем int. Увеличение переменной в структуре из самой структуры работает быстрее чем увеличение из внешнего по отношению к структуре кода.
>>890724 Ты там ничего не разберешь. Даже я много чего не понимаю. Многие тесты сделаны для конкретных алгоритмов которые я писал когда-то, я уже даже забыл каких.
кто пишет на .net core: какие кто. наличии адекватные средства для профилирования памяти? нашоль в гитхабах CoreProfiler, по-моему, но вот слабо разобрался, как его впердоливать в приложение. также мсдны говорят про интерфейс ICorProfiler, и, судя по всему, он также действует по принципу "интегрируй меня в приложение и пингуй время от времени". есть что-то чуть более френдли, а-ля дотмемори - запустил в стороне и смотри на графики?
>>890742 Ну так ясен хуй он не разберет, они же рряя одноразовые вы проста быдло и нипанимаете что button1337_Click это удобно а я большие проекты пишу!
>>890634 Паттерны же только уродуют код и делают его менее читаемым для стороннего разработчика. Вообще эта хуйня, зачастую идущая против принципов ООП, не понятно нахуй и откуда взялась.
Создал textBox_logWindow который хочу использовать в качестве лога. Создал файл класса LogWindow. В самом классе хочу определить методы для запист в лог, сохранения лога и т.д. Думал что, поскольку общий namespace, для добавления нового текста в лог будет достаточно всего лишь public static void WriteLog(string data) { textBox_logWindow.Text += data; } Но хер там был. Пробовал класс LogWindow делать наследником MainWindow. Но один фиг - имею доступ к текстбоксу в MainWindow но не имею в своем классе.
Прошу учесть при критике и даче рекомендаций, что это вообще моя первая программа на C#.
Класс хотел сделать для того что бы в коде была возможность в одну строку LogWindow.WriteLog(data) выводить информацию о работе программы.
Пикрил мой бот для ла2 написанный на autoit, сейчас пилю другую программу, но хотел такой же лог замутить для наглядности работы.
>>890985 Я в таких случаях делал так. Класс лога статический и инициализируется в конструкторе главной формы с передачей ему объекта textBox_logWindow. Далее класс лога использует этот объект для вывода
>>889291 Насколько это правда? На форуме разработчиков последний пост об обновлениях был вроде в 2012. Ну и типа да, как сказал другой анон, WPF переродился в UWP
>>891410 Спасибо анон, я если честно и не думал что кто то подскажет чего внятного, какие то листобоксы, предложение вместо десктопа веб приложение и т.д. >/pr С одной стороны мне нравиться сисярп, ибо куча фич и наворотов, но блин - реализация лога на autoit у меня заняла минут 10, на то что бы разобраться как запилить точно такую же вешь сутки ушли(а до этого еще и основы и wpf не один день ковырял). Сложно блин. Особенно то что по сути одну и ту же задачу можно решить десятком способов и не понятно какой способ правилен, а какой говнокод и в будущем вылезет боком.
>>891660 Я насколько понял не говнокодом будет использование data binding. Но блин - в текущий момент для меня это слишком сложно, пытался не раз, но каждый раз после того как весь день читаю гугл и не напишу не одной строчки кода понимаю что мне просто рано еще, надо дальше дрочить теорию и писать хоть что-то как умею. Ибо просто дрочить теорию и вообще ничего не писать только потому что не в состоянии написать как надо - такое себе.
Есть тут webapi дядьки? Просвятите меня как работать с калейдоскопом технологий и иструментов, что и как актуально в продакшене. А то я спал последние N лет. Интересуют Best Practices для bower/gulp/npm/owin/docker/angular/blablabla.
В первую очередь блядь мне надо поставить менеджер пакетов npm, которому нужен nodejs, на котором я никогда не буду писать. Нахрена эта зависимость? Ну ладно. Ставим bower с помощью npm (Один менеджер пакетов другим менеджером пакетов). Далее используем gulp, чтобы вытащить все актуальные файлы из bower_components в заинджектить html файл. При этом main файлы некоторых нужно перегрузить в bower.config. Пиздец. Всё теперь общается через owen, mvc не нужен вообще, да и докер. Пиздец короче.
Можете покидать ваши стеки/ворклоу с работы? Реально используете gulp&bower&npm? Для чего? А Докер? Как это всё работает с continuous integration?
>>891866 Алсо, на msdn вообще было написано что в wpf единственный комильфо вариант юзать data binding. Получение данных для интерфейса нужно сделать средствами xaml. Все остальное быдлокод если верить msdn. >If you are getting started with WPF, you might wonder whether it is easier to avoid learning data binding, and instead just write code to do most of the data manipulation in your projects. While this may be a valid way to do it, I would suspect that you will grow to use, and perhaps even love, XAML-based data binding. https://msdn.microsoft.com/en-us/library/aa480224.aspx Но я слишком туп, сколько не пробовал - либо не компилится, либо не работает.
>>891938 прям весь мир клином на WPF сошелся? в любом случае, если это будет биндинг, ты выделишь интерфейс не в Window, а ViewModel и будешь уже изменять её стейт
void DO () { var type = typeof(T); if (type == typeof(int)) OtherClass.ProcessIntegerDelegate(ref doSmth); // ошибка приведения из DoSmth<T> в DoSmth<int> } }
static class OtherClass { static public void ProcessIntegerDelegate (ref DoSmth<int> doSmth) {...} }
Народ, тоже вопрос про дженерики. Можно ли как-то считывает из строки значение в зависимости от типа? class GenericMatrix<Number> { Number[][] matrix; GenericMatrixNumber(int cols, int rows) { for (int i = 0; i < cols; i++) for (int j = 0; j < rows; j++) matrix[j] = СчетатьХуйню();
} }
Естесно Comsole.ReadLine не подходит. А как тогда?
Сап шарпач. Как мне зашифровать информацию, с помощью пароля? То есть пользователь вводит любой пароль и он каким-то образом преобразовывается в ключ шифрования. Нагуглил PasswordDeriveBytes, но ему нужна соль и вектор инициализации, откуда мне их брать? Если рандомить, то в следующий раз пользователь не сможет расшифровать информацию этим же паролем. Как быть?
>>892865 1. переводишь строку с паролем в массив байт: var pbytes = Encoding.UTF8.GetBytes(password + "ОХУЕННАЯ_СОЛЬ"); 2. хешируешь этот массив байт, превращая его в ключ шифрования: var aesKey = SHA256Managed.Create().ComputeHash(pbytes); 3. шифруешь AESом с размером ключа = длине хеша и нулевым вектором инициализации: var AES = new RijndaelManaged(); AES.Mode = CipherMode.CBC; AES.KeySize = 256; AES.BlockSize = 128; AES.Padding = PaddingMode.PKCS7; using (ICryptoTransform encryptor = AES.CreateEncryptor(aesKey, new byte[16])) { return encryptor.TransformFinalBlock(data, 0, data.Length); }
>>892865 хранить соль рядом с пользователем. после того, как юзерь что-то навводил сравнивать шифрованый пароль с результатом ПосчитатьХэш(инпуиЮзера, созраненныйСалт)
Господа, подскажите как лучше всего передать набор объектов, заранее неизвестных но чётко структурируемых в другое приложение по сети? Текущая мысль сформировалась, что подходит что-то типа JSON сервера, который отдает данные по запросу клиента. Есть ли решения лучше или это достаточно адекватно?
>>892951 Сразу поправлюсь, планируемые клиенты (их возможно много) могут быть написаны на каком-угодно другом языке. Тут подумалось, а почему бы не отдавать XML?
>>892884 Просто берешь самый дешевый дроплет на digitalocean, в один клик ставишь туда образ убунты для поднятия вебсервера. Всё это займет 2 минуты, и у тебя уже будет сразу готовый сервак со всеми нужными развернутыми сервисами, и выделенным IP. Дальше настраиваешь мускуль как тебе угодно и работаешь.
>>892951 >>892954 Если для твоих данных не предполагается редактирование человеком, то нахуй все эти форматы. Отдавай напрямую бинарные данные и всё. Сделай микропротокол с одним байтом на команду и всё. С сокетами и массивами байт работать можно в любом языке.
>>892957 Зависит от твоих требований к стабильности серверов. Юзаю DO с начала 2014 года, десяток дроплетов у меня там есть. Ни разу никакой внештатной ситуации не было. Аптайм одного из дроплетов 100% с февраля 2014 года (другие я просто сам по разным причинам перезагружал или временно отключал). Пять баксов в таком случае за самый дешёвый дроплет не жалко.
Посоны, есть ли нормальная тулза для рисования 3D моделей для XAML чтобы в WPF приложении использовать, я ебал вручную указывать точки, нормали и т.д. чтобы нарисовать что-то простое, требуется часа 2. Есть ли инструмент для создание 3Д моделей чтобы выдавал код в XAML?
Шарпач, ты-то мне и нужен. Как понять, что ты уже мидл? Если я могу написать дерево, сортировку, умею в синхронизацию потоков, веб-приложения, сериализацию - это уже мидл или нет?
>>893377 >Если я могу написать дерево, сортировку, умею в синхронизацию потоков, веб-приложения, сериализацию - это уже мидл или нет? Это уже может быть стажер и ты можешь пытаться пройти собеседование на вакансию.
>>893470 Ну мидл это самое противоречивое, не рыба ни мясо. В общем случае это опыт фултайма от двух лет, все разнится от вакансии к вакансии, но если ты на той же работе проработал джуном 2 года - просись на мидла точно.
Посоны, как организовать обмен данными между приложениями в реальном времени на C#.
Есть в общем такая ситуация. У меня есть приложение, которое коннектится с сервером, берет оттуда данные кладет это все в словарь(Dictonary) и обновляет значения в этом словаре каждые 200мс ну и соответственно активно использует этот словарь в работе. Возникла необходимость (у заказчика) сделать приблуды в 3Д красивые, быстро работающие, с возможностью покрутиться, "полетать". Решил для этих целей использовать Unity 3D, там тот же C#.
Сначала думал там использовать ту же библиотеку что используется в основном проекте, прочитал как подключать dll к юнити, все подключатся все нормально, а вот именно Interop библиотека для работы с сервером очень старая и не для C# а в общем для .NET 1.0 и при подключении к Unity выдает Marshall ексепшены и т.д.
В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity).
Думал насчет обмена с помощью базы данных, но будет ли это в реальном времени? С другой стороны в первом приложении данные обновляются долго(200мс) должно все успеваться.
>>893485 >В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity). Самый быстрый способ - MemoryMappedFile
Как лучше реализовывать (де)сериализатор своего формата данных (желательно в декларативном стиле, что бы нужные поля классов можно было помечть и т.п.)? Есть примеры?
>>893854 Поля помечаются атрибутами. Для каждого поля и типа можно указать атрибут и прочитать его функцией MemberInfo.GetCustomAttributes. Берешь объект, читаешь его поля/свойства функцией MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); где, type - тип объекта получаемый функцией GetType объекта. Параметры можно использовать другие.
Дальше хуячишь всё это в кэш чтобы не читать многократно. Можешь не хуячить, тогда всё будет работать медленнее. Значения полей при сериализации читаешь функцией FieldInfo.GetValue или PropertyInfo.GetValue. Пишутся поля функцией SetValue.
Уточню почему так. Сам сериализуемый класс находится в другой сборке и недоступен для правок. Я хочу написать шаблон который на вход берет сериализуемый класс и добавляет определение порядака и состав сериализуемых членов. Хотелось бы сделать это делкаративно, но очевидно атрибуты тут не проканают.
Суп антоны, подскажите с архитектурой приложения: имеется пул объектов(изменяемый) одного типа по которому нужно пройтись и обработать. Над всем этим прикручен гуи (тип я думаю пока не важен). Проблема в обработке что она может занять до 5 секунд. Первый вариант который пришёл в лоб - это обрабатывать объекты в другом потоке вызывая асинхронную обработку. Не сосну ли я в таком случае? Порекомендуйте материал по множественным колбэкам в одном потоке, мой рунглишь не позволяет корректно сформировать поисковый запрос. Накидал картинку для примерного понимания.
>>894132 скорее всего для CurrentCulture разделителем дробной части является запятая
>>894142 я не понял, какие требования накладываются на этот пул? где ты там собрался соснуть и почему 5 секунд на обработку в твоем случае это много? множественные колбэки в одном потоке - это задачи с продолжениями (Tasks, Continuations)
Если рассматривать констрейн изолированно, то он вообще ничего об аргументе генерика не предполагает. Так что твоя фраза что можно все что позволяет констрейнт вообще ни о чем (с тем же усехом можно сказать пустое множество это множество которое ничего не содержит). А вопрос был явно в связи этого генерика с производным классом его юзающим.
Есть поток, мне надо читать с него в разных местах, в произвольном порядке, при помощи разных BinaryReader'ов (например сначала 3 байта первым, потом 5 вторым, потом еще 10 байт первым, но что бы в главный поток уже стоял на курсоре 8 байт, и т.д.). Это будет работать или каждый ридер пашет по своему индексу независимо?
Да вся та же сериализация, это я писал выше. Хочу сериализовать внутри класса сримами, для рекурсивного вызова (если поле не простое а другой сериализуемый класс) нужно текущий стрим передать ему и что бы он с текущего места взял сколько ему надо, размазал по себе и вернул поток для дальнейшей сериализации.
Есть кто из Москвы, работодатель нашел меня и предлагает 120k, писать десктоп на C#, Winforms, WPF. Это нормально для москвы или мало для NET - программиста? Сколько из этого за хату отдавать?
>>894612 Смотря где жить будешь. От 20к (это всё ебеня из которых добираться до Москвы 1.5-2 часа) до всей зарплаты соответственно. Все цифры и карта есть в интернете. По еде можно укладываться и в тыщу в месяц картофан + крупы, хотя таких целей у тебя вроде и нет.
>>894601 да, собственно говоря, все не так стоит начать с вопроса: зачем тебе множество потоков для разбора одного объекта? вопрос снимается, конечно, если у тебя исходных данных на гигабайт. если ты думаешь, что распараллеливать такую задачу это очень эффективно, то я тебе отвечу - не в твоем случае
Поток один, это адаптеров над этим потоком несколько. А несколько их из-за рекурсивности сериализации вложенных членов. Т.е. метод Serialize каждого класса заводит свой адаптер типа BinaryWriter из BCL и сериализует члены, когда натыкается на непростой член пытается сериализовать его, а ему в свою очередь тоже придется поднять такой же райтер над потоком который ему дадут.
Я так и не понял что все не так? Если писать без потоков, то придётся ебаццо с индексами в массивах, что некрасиво.
>>894671 ааа, блжад, потоки - это Stream, а не Thread я думаю, что индексами было бы проще и легче, учитывая, что тебе не придется в каждом разе прошагивать данные от начала до N. даже попросту сдвигая позицию ридера
class ResearchTeamCollection<TKey> { public ResearchTeamCollection(){ } Dictionary<TKey, ResearchTeam> dictionary = new Dictionary<TKey, ResearchTeam>(); public void dictionaryAdd() { dictionary.Add(TKey, new ResearchTeam()); // как мне тут сделать ключ словаря независимым от типа? } }
Допустим, в другом классе я инициализирую так: ResearchTeamCollection<string> coll = new ResearchTeamCollection<string>(); coll.dictionaryAdd();
>>895062 Допустим, добавляю вот так: coll.dictionaryAdd("First", new ResearchTeam()); Если бы был тип int, добавлял бы так: coll.dictionaryAdd(1, new ResearchTeam()); Каким образом тогда мне записать функцию для всех типов?
Как из VS выложить существующий проект в репозиторий на github? Помоги, шарпач, я это в первый раз делаю и не понимаю, почему эта сука не работает. В VS подключился к своему аккаунту на гите, но не могу найти опцию захуярить в конкретный репозиторий весь проект. ЧЯДНТ? Я понял, как создавать репозиторий из VS, как в него коммитить и запихивать изменения, но в упор не вижу функции залить уже существующий проект без изменений на github.
>>895283 >>895285 Да всё уже, можно сказать разобрался. Просто мне нужно несколько проектов закинуть на гит, получилось закинуть 2 из N, а с 1 я где то накосячил, и проебал кнопку паблиш, теперь хуй знает где её найти. Как отвязать проект от репозитория или как закинуть на новый?
>>895286 Мда, я первый проект захуярил в visual studio team services вместо git, и теперь ору на гитхаб "ЧО ТЫ СУКА МОЙ ПРОЕКТ НЕ ПОКАЗЫВАЕШ?!". Как сменить VSTS на github в team explorer'е?
>>895288 Самый простой способ - удалить скрытую физическую папку репозитория в корне проекта. Ну или разобраться с окном Team Explorer. Или как нормальный программист, поставить TortoiseGit.
>>895294 Терминал гита хотя бы глючит не так часто, как тулзы для работы с гитом в vs. Когда работал с гитом через tfs, то частенько ошибки выскакивали, когда запушить невозможно или запулить какого-то хуя, когда в терминале все ок работало. Короче рекомендую перекатываться на командную строку - сначала плюешься, а потом охуеваешь как раньше без этого жил. мимо-проходил
>тулзы для работы с гитом в vs TortoiseGit не работает с VS, или я чего-то не знаю.
>рекомендую перекатываться на командную строку Я и так некоторые извращенные команды выполняю через командную строку, потому что только через нее это можно сделать. Но для обычного сценария, например просмотр графа веток, с головой хватает TortoiseGit.
>>895294 > матюки гита запоминать git pull git commit git push ебать тут много
> память не резиновая ну, во-первых существует блокнот. и я ничего плохого не вижу записать что-то вроде <сохранить изменения git commit -m "comment message"> во-вторых, как же ты кодэ свой пишешь, если еще несколько литералов запомнить - это тяжкий труд? если у тебя сплошной if/else, мой вопрос снимается
>>895375 >ебать тут много Я часто еще переключаюсь между ветками, соединяю коммиты, откатываюсь до определенной версии, создаю и удаляю ветки, смотрю историю изменений определенного автора...
>существует блокнот Есть у меня блокнот, там несколько МБ текста "важной" информации, которую надо не забыть, приблизительно в таком же формате.
>у тебя сплошной if/else Угадал, пикрелейтед недавнего кода. Хотя я хорошо помню листинги нескольких программ на 1-3 миллиона строк кода.
>>895416 >Block - это record. >Statement - это discriminated union. Что-то понятнее не стало, надо идти учить F#.
Вообще C# заебал своей топорностью, хочется укатиться на более гибкий-современный язык, но блин как подумаю что все придется переписывать с функциональной парадигме - то сразу перехочиваетсяю
>>895423 >что не так с гибкостью сишарпа, например? Это то что сходу вспомнил: - Отсутвие type inference для полей и свойтв (private Diction<string, string> _field = new Dictionary<string, string>()) - Отсутсвие primary contructor. В каждом классе приходится писать пик1 - if/else switch try/cache (тут не уверен) - не выражения и не возвращают результат - нет нормальных (не Func<>) функциональных типов и функций на топ-левеле (язык вроде бы мультипарадигменный, но для любителей функциональшины у нас static methods) - Notification проперти из MVVM (без кодогенеровов типа Fody) это ебучие портянки кода, которые средствами языка нельзя абстрагировать - Нельзя делать свои DSL средствами языки. Я бы давно отказался от Xaml и писал все в коде, но это получается слишком избыточно. - Отсутвие защиты он Null ссылок - Отсутствие оператор let/val (это как var, только нельзя изменять)
>>895425 >Так C# и есть гибкий и современный язык. F# его скорее дополняет, чем заменяет. Надо признать что C# за 15 лет уже накопил свое легаси и для .NET он тоже что и Java для JVM (конечно C# уделывает Java) - рабочая лошадка для энтерпрайза .
Только в JVM я могу свалить на какую-нибудь Scala/Kotlin/Groovy и там будет большое комьюнити, а в .NET из популярных альтернатив это VB лучше убейте и F#
>>895440 > Отсутвие type inference для полей и свойтв вот тут мне тяжело представить преимущества этого вот, за исключением того, что "мне впадлу писать длинный тип". ибо в качестве свойств, по большому счету, используются интерфейсы/абстрактные типы. к тому же для библиотек, используемых в других солюшнах, при условии наличия публичного сеттера, это все покажется странным. может быть я что-то не видел в своей жизни.
> primary contructor эту штуку обещают уже второй релиз. чтож, очередной сахар
> if/else switch try/cache хех, для if-else есть тернарный оператор. как можно использовать switch в руби мне, например, тоже понравилось. но вот что из кетч ты хочешь получить? или ты имеешь ввиду что-то вроде return { try this.Calcuate(); } catch { null; }?
> нет нормальных (не Func<>) функциональных типов и функций на топ-левеле я полный ноль в ФП, что это все значит?
> защиты он Null ссылок чтобы не вылезал NRE? и где тут плюс?
> оператор let/val ну тут не знаю, сомнительно. есть readonly, с другой стороны почему бы и нет. но тоже обходился без подобного и это не мешало мне
>>895450 >я полный ноль в ФП, что это все значит? Если сильно упрощенно, есть что-то типа наследования из ООП, только в функциональном стиле. Когда можно переиспользовать ранее написанный код. Одна из таких особенностей называется каррирование: Func<int, Func<int, int>> sum = x => y => x + y; Переиспользовать можно например так: Func<int, int> add1 = sum(1); Вот только на C# это очень криво выглядит, а некоторые вещи и вовсе нельзя делать.
>чтобы не вылезал NRE? и где тут плюс? В ООП NRE падает в рантайме, в функциональщине - во время компиляции. Нулевая вероятность попасть NRE на лив.
>>895453 > вангую потому, что понятия NULL в ФП отсутствует в принципе? Те же яйца, только в профиль. По умолчанию все типы не могут принимать null, надо явно говорить что вот этот тип может быть null. А везде, где надо достать значение такой переменной, надо писать if, который должен обязательно покрывать все ветления, иначе ошибка компиляции. Такой тип называется чуть иначе, но суть та же. Но и никто не запрещает использовать null в том же F#.
У меня есть класс Log. Я в классе MainWindow пилю поле Log log = new Log.
После чего пилю в коде this.DataContext = log; И могу использовать в xaml binding для получения полей из объекта log. Text="{Binding Data, Mode=OneWay}" Вопрос - как использовать data binding из нескольких обеъктов. У меня например есть 2 текстбокса. Одному надо брать данные из объекта log, второй из объекта fonts. В гугле везде примеры с использованием одного объекта, а как быть если тебе надо из нескольких в wpf отображать данные - вообще хз.
Я тут выше спрашивал совета по поводу написания класса Log, как мне порекомендовали смог сделать >>891410, но теперь пытаюсь сделать все более грамотно
Зачем сраный visual studio ставит 32 вонючих пакета, 30 из которых я при установке запретил ставить? При этом этого оказалось мало, пришлось еще и докачивать. Это абсолютно идиотский подход к поддержке продукта.
>>895452 по поводу каррирования еще, есть же продолжения у задач. конечно, поднимать стейт-машины задля достижения такого стиля - тупость, но хоть так лол
>>895481 привязать логкомпонкнт к свойству пью модели, которое, в свою очередь, использовать в двух разных классах или использовать конвертеры при биндинге
>>895500 Вьюмодель это промежуточный класс, в котором будут все необходимые мне классы. Этот промежуточный класс я задаю в this.DataContext, после чего смогу через точку обращаться к классам, внутри класса из xaml?
>>895510 Все, понял. Спасибо. У меня так часто бывает - когда читаю рекомендации где мне словами отвечают - вообще не вдупляю чего от меня хотят, но на код глянешь и с первого раза понимаешь все. Еще раз спасибо, я с этими биндингами не один день пердолился пытаясь понять как их использовать и по тиху мозайка начинает складываться.
>>895532 Хотя можно реализовать INotifyPropertyChanged только во ViewModel и писать проперти для данных объекта. public string Data { get { return log.Data} set { log.Data = value; OnPropertyChanged("Data"); } }
>>895510 Вообще когда начал пробовать сам еще 1 вопрос возник. Раньше я создавал объект класса лога, делал this.DataContext = log, а дальше спокойно проделывалыв манипуляции с объектом. Например вызывал log.Write(string) который делал log.Data += string + "\n", после чего все это дело попадало в textBox_log. Сделал я класс ViewModel. Сделал я this.DataContext = new ViewModel(), и обнаружил что не знаю как мне вызвать метод Write() объекта log, для того что бы поместить мне в лог нужную инфую.
Можно конечно сделать ViewModel viewModel = new ViewModel(); this.DataContext = viewModel; После чего делать так viewModel.Log.Write("some text"); Но выглядит как то не очень(хотя я вообще хз, может это и норма, я вообще ньюфаня в ооп и в жизни не писал ничего сложнее скриптов для автоматизации небольших задач с пк). Как правильно и граммотно поступать то?
>>895534 За ссылку спасибо. Сам учусь по этому сайту, очень доступно и просто объясняет, но своими бы силами очень долго искал ответ. Это то мне как раз и нужно. Я делаю программу, в процессе работы которой в лог выводится результат работы. Юзер выбрал опции, кликнул кнопку, выполнился код и в логе отобразилась информация о проделаном и результатах. Тут то мне INotifyPropertyChanged и понадобится. Но для начала пытаюсь научится статичный текст выводить вот, от простого к сложному.
>>895586 Почитай про MVVM-паттерн, WPF заточен под него. Я так понял ты вызываешь метод из Window.cs(code-behind). Логику нужно выносить оттуда (Честно, я сам пока не до конца понимаю MVVM, все операции с данными и прочим я засовываю во тоже ViewModel).
>>895600 Благодарю, на том же метаните нашел годный материал по mvvm. Таки да, вся куча логики было в MainWindow.xaml.cs. Буду это все дело выносить оттуда.
>>895636 Ты путаешь c MVC, в которой ViewModel называют plain-data объект для UI. Другое значение - роль в MVVM паттерне, и там код вполне себе будет, но не бизнес-логика, это да. ViewModel должен по идее следить за изменениями в модели и преобразовывать их во вью, а так же за пользовательским вводом(изменениями view) и форвардить их в Model. 2-way binding.
>>895724 Ну я например понимаю что то что я пилю, можно сделать без применения всей этой еболы mvvm, wpf и т.д. Можно было и на winform запилить спокойно и не ебать себе мозги, но у меня то целью являются не написание программы, а обучение. Программа как средство для изучения.
Народ кто может дать ссылочки на статьи/книги как правильно строить базы данных (MS SQL) для ASP.NET. Интересует архитектура.
И еще такое: У нас есть инет магаз "ВасяПупкин". Зачем нам отделать в отдельный проект взаимодействие с БД Пример: ВасяПупкин.Domain -> собственно само взаимодействие с БД ВасяПупкин.UI -> ASP.MVC проект.
Если можно все сделать в одном проекте ASP.MVC, а связь с бд организовать в Models
Анон, выручай. Нужно запилить 2d игру с физикой в Windows Forms. Суть такова: есть машина, которая едет по поверхности(кривой) и может балансировать вперёд/назад. Что-то сродни gravity defied, но поверхность не ломаная линия. С чего начать и что курить? Буду рад любому совету.
Шарпач, поясни, как переносить проекты с .dll библиотеками на другие ПК, чтобы не? Недавно столкнулся с проблемой, что когда я запустил солюшн на другом кудахтере, у меня отпали кхуям все референсы, они, видите ли, абсолютную адресацию имеют, несмотря на то, что при добавлении .dll копируются в папку с .exe
Хочу при переходе Entity<->DTO перегонять int[] в строку вида "2,3,4,5" и обратно. Но маппинг работает только в одну сторону.
Я понимаю, что можно дёргать конструктор напрямую, вместо ForMember, но я хочу использовать это в другом проекте, там в конструкторе примерно миллиард аргументов и только один из них нужно по хитрому конвертировать.
Посоветуйте по рефлексии. Сделал простой атрибут. Запилил класс с несколькими атрибутированными переменными. Потом функцию, которая берёт всё поля и их атрибуты и отправляет в конструктор другого класса. WTF?!?!?!??!??!!!!!11 Вместо функций подставлял стринги и оно их отправляло. Что пошло не так?
>>896626 Спасибо за отклик, тики отловил NULL и вроде работает. Такой момент, возможно ли имея имя поля в строке присвоить в экземпляр какое-либо значение?
>>896637 да, через рефлексию вообще все нах можно. вот только как делать я, естественно не помню. но помню, что все методы из .Reflection носят говорящие названия. ищи методы типа SetField() или SetValue()
Привет двач, возникла проблема с Visual Studion, а в частности с консолью NuGet. При запуске консоли выскакивает данное сообщение: An error occurred while creating the pipeline. Гуглил - ничего. Возможно ты анон сможешь помочь мне
Ананасы, кто-нибудь на фрилансе бабки зарабатывает шарпом? Единственное направление, где это возможно это asp.net, но полистав всякие апворки пришел к выыводу, что это не самая популярная тема. На asp.net фрилансом вообще норм можно зарабатывать нормально?
>>896792 Если ты листал апворк, то видел достаточно индусов, которые вполне нормально гребут на asp.net. Он так то нужен как правило какому-нибудь энтерпрайзу, это же как джава, в идеале это не самый удачный стэк, но если ты его знаешь - то без работы офк не останешься.
мимо диванный, который внаглую перешёл на удалёнку вместо офиса
Двощ, выручай! Пытаюсь подключиться к БД в MS SQL через System.Data.SqlClient.SqlConnection используя User ID и password. Вот только я нихуя не въебал, User ID - это логин для входа в MS SQL сервер? Если да, то как мне сделать так, чтобы задачи из под этого соединения выполнялись пользователем, созданным от этого логина? Просто пользователь состоит обладает определенными ролями, которые мне нужны, и вот чё то я не догоняю, как работать из C# в MSSQL именно от имени определенного пользователя, а не логина.
>>897902 1. На сервере создаешь логин с нужным именем и паролем. 2. Даешь нужные права на нужную базу. 3. На сервере разрешаешь логин через маздай аутентификацию И sql аутентификацию. 4. В коннекшен стринге прописываешь путь к серверу, имя бд и креденшиалы созданного пользователя. 5. ??? 6. Идешь нахуй
Суп шарпаны, хочу плотно заняться десктопными приложениями на WPF, стоит ли мне изначально возиться с прямой реализацией патерная MVVM или лучше накатить тулкит и изучать через него?
>>897996 Ну тогда готовься к подводным камням при расширении базовых контролов, через хуй пойми что работающим ресурсам и прочим весёлостям WPF, который не поддерживается официальными разработчиками с 2012.
Не знаю, о каком именно тулките ты говоришь, и чем он тебе поможет в реализации MVVM, но я бы советовал ещё на берегу вкурить, что предполагает под собой следование принципам MVVM, и как он реализуется в WPF.
>>897998 Ты судишь по своему опыту или начитался статеек в этих ваших интернетах? Изучаю C# не так много времени и давно приглядывался к C++, но он жутко неудобен в том, что сделать в нём что-то неправильно как нехуй петь, а я не профессиональный программист и пишу в основном для своих нужд. Строгая типизация и управляемая память для меня значительное преимущество от которого не хочется отказываться.
>>898000 Из статеек вычитал только то, что WPF чуваки из microsoft не поддерживают с 2012. По своему опыту высказал остальное. Из того, что больше всего рвало пердак, вспоминаются проблемы с комбинированием словарей ресурсов и стилей одновременно в одном контейнере ресурсов, черезжопное подключение обработчиков событий в словарях ресурсов к контролам внутри стилей, двойное срабатывание события DateChanged на DateControl'е или какой там стандартный, не помню уже при смене даты DatePicker, и одинарном при смене даты через текстовое поле на том же контроле из-за роутинга событий, кажется. исправляется костыльно, ну и прочие мелкие недоумения при использовании XAML'а, которые заключались в том, когда ты восклицаешь "да схуяли нельзя?!" там, где, казалось бы, всё должно работать. И то, что разочаровало меня более всего, в моей 600к мухосрани нет ни одной вакансии, ориентированной на WPF, да и вообще, как мне кажется, из за тенденции перехода на тонкие клиенты и мобильные приложения, десктоп умирает.
>>897996 Мда. Сравнил хуй с пальцем. Васяноподелие qt на котором весь софт выглядит - привет 2000, либо wpf на котором запилена студия и офис. Я конечно не хочу принижать заслуги qt в прошлом, но в данный момент это удел пердоликов. Прогрессивные люди выбирают c#.
Двач, PAMAGI. У меня проблемы с взаимодействием MSSQL и C#. В коде C# вызываю хранимую процедуру, которая выполняет select'ы. Результаты работы хранимой процедуры записываю в DataSet из ADO.NET через SqlDataAdapter. НО! Если у пользователя, чьи данные указаны в строке подключения, не хватает прав, то не генерируется никаких исключений. Следовательно, если у пользователя нет прав на выполнение процедуры, я даже никак ему об этом сообщить не могу, томушо исключение из MSSQL не подхватывается ни дата адаптером, ни SqlConnection'ом. Как быть? Мб есть альтернативы DataAdapter'у?
>>899038 >DataSet из ADO.NET через SqlDataAdapter У тебя древнее говно к жопе прилипло! В ADO.NET нет DataSet, который из .NET Framework 2. Чего ж ты на первой версии не пишешь, некрофил?
>>899064 Тише, тише. Я мимостудент, и нам не рассказывали про EF, а мне слишком впадлу им заниматься для моих нужд. И я думал, что DataSet он родом из ADO.NET а может и нет, я хуй его знает. Беру его из using System.Data. Это разве не ADO.net?
>>899073 Если переводить на русский термины, есть "подключенные" и "отключенные" классы. Первые работают с базой данных, вторые работают не с базой данных и нахуй не нужны. Так вот: первые - Connection, Command, DataReader, DataAdapter; Тогда как вторые DataSet, DataTable, DataRow, DataColumn. Это пиздец какие ебанутые классы. Часть простых вещей без костылей не сделать. Первые классы даже сейчас используются, например где важна скорость. Вторым - есть много замен, или они вообще не применимы к задаче.
>>899541 List<T> будет вместе со всем прочим хранить ссылку на T[], который, в свою очередь, будет представлять собой сплошной ряд объектов в куче (это исключая случай, когда массив будет достаточно велик дабы попасть в LOH. в таком разе ряд будет не очень сплошным, но это уже совсем другая история)
Есть желающие подработать? Заранее прошу особо говном не закидывать, знакомый который сам обычно всем с курсачами помогал слег в больницу и попросил найти в интернетах кого нибудь что бы курсач запилить, довольно простенький на asp.net. Черканите на мыло [email protected] если кого заинтересует с предложениями по цене. https://docs.google.com/document/d/1APjX_IMyCsODb2JFJFAype-8dj4xusR5hug0iG-A9Jo/edit?usp=sharing Еще раз извините за оффтоп и не кидайтесь говном.
>>899692 Я не он, и у меня вопрос как физически представлен в памяти лист. Это же не линкедлист в котором каждый элемент хранит ссылку на предыдущий и следующий. Как он хранится в памяти?
>>899803 как и любой другой ссылочный тип - имея под боком все значимые типы и интовые ссылки на ссылочные типы в куче в границах, обозначенных размером типа
If Count is less than Capacity, this method is an O(1) operation. If the capacity needs to be increased to accommodate the new element, this method becomes an O(n) operation, where n is Count.
Не совсем понятно что именно значит reallocating the internal array Это выделение памяти под новый массив и копирование туда данных с новым добавленным элементом? Тогда может для некоторых List заранее Capacity задвать если знаешь что List будет расти чтобы избежать лишних выделений памяти?
Как быстрее заполнить список структур: создавать через new прямо в аргументе или за пределами цикла создать локальную переменную-буфер, заполнять ее поля и уже ее передавать в Add?
Шарпаны, а где почитать про управление памятью в управшляемой кучи. Те есть класс, в котором тоже ссылочные типы. Как их лучше всего создавать или нет никакой разницы? Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки?
>>900507 Петуха забыли спросить. Спокойно читаю документацию на иглише, вся системы и весь софт на инглише. Но при этом - если есть вменяемая ру альтернатива документации или книги буду читать на русском. Ибо мозг раз в 10 меньше будет уставать. Для того что бы изучать английский, есть курсы, спец книги и спец сайты, документацию я читаю совсем для другого, и на русском языке я куда быстрее и куда больше смогу усвоить.
>>900632 Я в первую очередь учу язык из соображения его востребованности. Для меня это всего лишь способ заработка. Оставь свои мантры для красноглазиков.
>>900623 быстрее инициализировать список можно только указав Capacity в конструкторе. то, шо ты привел тут будет однозначно одинаково по скорости ибо для Add() значение структуры будет копироваться
>>900631 > где троелсен, рихтер, msdn > Как их лучше всего создавать или нет никакой разницы что значит как? или кого "их"? > Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки? в случае, если это локальная переменная онли и никуда не пойдет дальше, до первого сбора мусора. в противном случае это зависит от времени жизни объекта, в котором он используется, и его поведения
>>900642 это решарпер подсвечивает typename1 -> typename2? или 2015 студия?
А разве не будет так, что в первом случае он один раз выделит перменную в стеке, из которых на каждом Add будет копировать значение, во втором случае на каждом Add сначала будет создан временный объект (в стеке?) и уже из него производиться копирование?
>>900675 >это решарпер подсвечивает typename1 -> typename2? или 2015 студия? Это Visual Studio Code с установленным расширением для F# (и кстати core clr приложение)
2015 студия вроде этого делать пока не умеет, а решарпер вроде и не собирается F# поддерживать.
>>900684 не, ну так-то будет, но это не сказать шобэ оптимизация, даже микро http://pastebin.com/MdTbgJWY начало тела цикла во втором случае - это IL_0013. конечно пришлось добавить еще пару строк, где происходит первая инициализация Struct. не то, чтобы я сильно знал MSIL, но очевидно, что фактическая разница - в двух инструкциях. учитывая то, что выделение памяти это просто наращивание указателя, выигрыша ты тут не получишь.
>>900727 > протолкнуть копать в структуры данных, а именно - в стек и в связный список. еси знаешь шо это такое и зачем нужно, то проблем не должно быть а если нет, то полистай Essential Algorythms
>>900743 в той книге на псевдомове программирования разобран пример построения стека на основе связного списка. не думаю, что ты сильно туп дабы не осилить это со второго раза. а если да, то ничем тебе не могу помочь
Шалом сишарперы Завтра нужно сдавать курсач и гуглится моя проблема как-то не так суть в чем, есть пикчебокс pictureBox6.Image = Image.FromFile(@"C:\Users\User\Desktop\History Test\History Test\History Test\bin\Debug\test\vopr\vopr" + numq + ".jpg"); как можно переделать путь к, чтобы он был относительно папки с самой программой? без вот этих дисков, юзеров и.т.д а то прога не то что с флешки, с другого пользователя на пеке не запускается))))))
>>900912 Ебанат здесь ты и безграмотная моча-пидорок, которая посты трет. Конечно, неприятно ощущать себя безграмотным дебилом, надо пост потереть.
(Автор этого поста был забанен. Помянем.)
>>901119 Ты какая-то ебанутая вонючая крыса в отличие от вежливой няши, задавшей вопрос. Надеюсь, ты скоро сдохнешь под колёсами грузовика или от тяжелой формы рака внутренних органов.
Сишарперы. Нужно копировать файлы определенных расширений из одной папки в другую (7 разных типов файлов). GetFiles() принимает только одну маску. Как лучше получить сразу все типы файлов?
>>901446 а v2 и v3 чем-то отличаются лол? еси ты явно указываешь IEnumerable<FI>, как в версии2, то лучше использовать метод EnumerateFiles. вообще, смотря > Файлов очень много что ты подразумеваешь. если файлов много, а под один фильтр попадет, в лучшем случае 5-10%, то лучше вариант номер раз. если же бОльшая часть общего контента окажется в результирующей выборке, то тащи из DirectoryInfo все. универсального рецепта нет в этом случае
Компадрес, никто не сталкивался недавно с проблемой с NuGet в VS2015? У меня вот пикрелейтед уже весь день выскакивает. На данный момент пробовал: 1. в настройках фаервола создал правило для devenv.exe на все входящие/исходящие подключения 2. удалил/устанавливал повторно NuGet 3. Пробовал использовать адрес NuGet'овского CDN для VS2013 ничего не помогает. Гугол тоже молчит. Раньше NuGet работал (не помню, когда в последний раз использовал, но я помню, что работал).
Насколько сложно забацать в WinForms контрол по типу пикрелейтед? По сути это помесь TreeView и CheckedlistBox, за исключением того, что детки разворачиваются не полностью на весь тривью, а в листбоксе. Ну и мне достаточно одного уровня вложенности.
>>898644 Господа, поясните за локатор в MVVM Light, как его использовать и зачем? не могу найти руководство для совсем дибилов а описания для понимания не хватает.
Вопросы по оптимизации. Знаю что система автоматически выносит объявление переменной за цикл. Такой вопрос, если у меня есть в цикле вызов метода, будет ли она также выносить объявления конст/обычных переменных за рамки данного цикла, или нет? транслируй в MSIL и смотри сам
>>901937 > выносит объявление переменной за цикл ты про i в цикле (for var i = 0...)?
> если у меня есть в цикле вызов метода, будет ли она также выносить объявления причем тут метод? я четота не догнал?
> выносить объявления конст константы находятся в метаданных, вангую, что такая же ситуация характерна и для методов (но не уверен)
> обычных переменных за рамки данного цикла чуть выше я ildasm-ом для другой ситуации приводил листинг. так там никакого выноса переменной, что создавалась внутри цикла, не было
>>902072 Сейчас разверну что я имел ввиду. Есть такой например код цикла: for(...) { var variable = 333; ... }
После трансляции, он будет таким(по смыслу): var variable = 333; for(...) { ... } Не то, чтобы переменная variable поменяет свою область видимости, а в плане что инициализация будет происходить единоразово.
А затупил я над следующей ситуацией:
for(...) { someMethod(); ... }
... someMethod(){ var variable = 333; ... } Дак вот какого будет поведения переменной variable, вынесется ли её инициализация до цикла или нет.
Будь это плюсы, я бы переопределил оператор присвоения и посмотрел как оно работает. Но в шарпике нельзя трогать данные операторы. Точно знаю что даже старые компиляторы плюсов, оптимизируют первую ситуацию, для системных типов. На счет второй уже не помню.
>>902103 Сук, не дописал. Я вообще не бум бум за дотнетовский байткод, чтобы в нем посмотреть результат трансляции простого примера, думал может знает кто. Если нет, то к выходным может сам осилю. Прочекать поведение для базовых системных типов и пользовательских соответственно.
>>902109 первая ситуация - это не более чем оптимизация статического конпелятора. нащщот второй от ситуации и того, как метод будет использоваться и какова будет статистика метода/цикла - может включиться встраивание метола, может повторное использование кадра стека, может еще чота. я однозначного ответа на это не могу дать, но можно попробовать поэкспериментировать
>>902118 Принято. Я реанимирую свои познания по программированию, и вот при работе со строками задумался над оптимальными реализациями своих методов. Будет ли он строки выносить, или нет. Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же, для констант свое поведения прописано. Короче, не понятно мне. К выходным может проверю какие оптимизации происходят при компиляции
>>901484 Общее количество файлов 11566. В выборку попадает 7014. Получается в моём случае лучше использовать версию 2, так как в выборку попадет более 60%?
>>901484 >>901525 >явно указываешь IEnumerable<FI>, то лучше использовать метод EnumerateFiles >Лучше вместо GetFiles() использовать EnumerateFiles() + Where(). Я как понял, EnumerateFiles() это lazy-вариант GetFiles(). Есть ли разница, с чем использовать EnumerateFiles() с FileInfo[] или IEnumerable<FileInfo>? Какие подводные камни, если использовать EnumerateFiles() с FileInfo[]?
>>901531 >хотя если всего 2 расширения Не 2. 7 различных типов файлов.
Есть семейство наследников генерика: public class G<T> where T:Base { public T Prop {get;set} }
Как правильно работать с разными классами этого семейства (т.е. T принимает разные значения) в обобщенном стиле? Я ввёл интерфейс c cвойством базового типа:
public interface IGBase { Base PropBase {get;set} }
и добавил реализацию свойства в исходный генерик:
public base PropBase { get { return Prop; } set { Prop = (T)value; } }
Всё правильно сделал? Оно работает, но есть ощущение говнокода и нарушения высших принципов проектирования.
Вечер в хату. Понимаю что есть раздел GD. Но стало интересно есть тут unity-шарписты? Которые пояснят примерно на пальцах, в чем именно заключается программач играча в юнити? Что именно используется из языка? Как разделяется клиент-сервер? Сам я яву ковыряю про структуры данных. Интересен минимум знаний нужный чтобы запилить с готовым набором моделей, анимации и прочего. 2д вид сверху мультиплеерный шутер =)
>>902134 > файлов 11566 > в выборку попадет более 60% не то шобы чуть более, чем половина - это какой-то вменяемый критерий. наоборот, середина - самая жидкая граница, ни туда ни сюда
> EnumerateFiles() это lazy-вариант GetFiles() ох, если бы EnumerateFiles() - это: return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
субъективно мое мнение - для 12к файлов использовать несколько EnumerateFiles() с последующей конкатенацией. если расширений будет добавляться, тогда пичаль, надо будет сравнивать бенчмарки
>>902124 > Будет ли он строки выносить, или нет ну все зависит от использования этих строк. не value/reference type влияет на такие вещи
> Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же как-то сильно по-школьному. строки - это массив чаров, правильнее говоря - char*. вроде бы как через unsafe они вполне себе изменяемы. дело в том, что нет безопасных прямых средств для работы со строкой как с изменяемым объектом. следовательно, > для констант свое поведения прописано тут не канает
>>902140 есть интерфейс, работающий изначально с Base. есть дженерик-класс, работающий от конкретной реализации Base в отдельно взятой ситуации. т.е. если:
public class Impl : Base {}
и ты используешь оба варианта:
((IGBase) someobj).PropBase = new Impl() и new G<Impl>().Prop = new Impl(),
то в первом случае потребитель интерфейса нихуя не шарит в том, Impl это либо другая реализация, в то время, как G<> четко знает, что работа производится с нужной реализацией. соответственно, тебе в первом случае нужно будет явно кастить и потенциально обсираться с InvalidCastException.
но в чем вопрос, я не понял. и нахуя делать отдельно интерфейс и абстракцию, причем по-разному
CreateFileInfoIterator делает соме маджик. на косой взгял на реализацию, там нечто вроде state-machine как для yield блоков. если это действительно так, я бы советовал по возможности юзать этот вариант. а если нет и при первом обращении итератора формируется конечная коллекция, то хуй знает
>>901683 Это я знаю, что можно тривью с чекбоксами сделать. Я не хочу что бы ветка тривью раскрывалась в километровую простыню, так как сабайтомов может быть более 1000. А так бы я отображал в листбоксе, присобачил бы туда виртуализацию и все было бы чики бамбони Пока сделал открытие сабайтемов в отдельном окне с чекедлиствью.
То что я назвал Base это иерархия классов модели, там лежат данных и я эти классы не контролирую, не могу ничего поменять. Мне надо к каждому такому классу прикрутить сериализацию, что бы потом гонять их по разным каналам. Идея была в том, что бы создать базовый генерик с параметром класса наследника Base, там будет общая инфраструктура, каждй наследник генерика будет имплементировать сериализацию. Было все хорошо, сами генерики выглядят красиво, но понадобились функции работы с наборами разных наследников этого генерика, так что пришлось выделять интерфейс. Например требуется записать список наследников Base, я по ним получаю из фабрики набор соответсвующих генериков-обёрток приведенных к интерфейсу, но их свой свойство Prop только что из фабрики ещё чистое, его нужно заполнить исходным Base переданным клиентом. Вот тут и возникает необходимость апкаста. Я так понял это неустранимо, в моем решении нравится что апкаст только один и изолирован в одном местею. Но в целом всё кажется каким-то кривым.
>>902398 Если ты хочешь DataContext в XAML'е заводить, то нужно в ресурсах не раньше grid'а объявить объект твоего VM с ключом, и потом самому гриду DataContext присваивать через ...DataContext="{StaticResource myVM}" /> А так он у тебя нихуя не увидит, ты ведь даже не объект какой то привязываешь, а просто название класса.
>>902408 Ну, формально, в WPF предполагается как можно больше кода, связанного с View и ViewModel оставлять в XAML'е. Однако, довольно проблематично объявлять VM в кзамле, если у тебя конструктор с параметрами. я вот ващпе не парюсь и в c# коде объявляю. одна строчка роли особой не играет.
Поясните за разницу между объектом и инстансом. Смотрел в одном видосике, что для шарпа объект это статические мемберы в хипе, он появляется при создании первого инстанса класса и остается один(а инстансов может быть много). Но посоны из падика пояснили, что объект это всегда и везде инстанс класса. Кому верить, видосику или посонам? На мсдн очень расплывчато написано, на стаковерфлоу есть темы про разницу, но там представлены обе точки зрения.
>>902489 как правило, если ты говоришь instance, ты подразумеваешь, что это некий член некого конкретного типа, имеющий место в адресном пространстве (куча/стек/регистры/etc), если ты говоришь object, то это: a) инстанс System.Object, б) некая абстрактная нёх, назначение которой зависит от контекста
> для шарпа объект это статические мемберы в хипе, он появляется при создании первого инстанса класса и остается один(а инстансов может быть много) судя по всему, описывается тип, а это > появляется при создании первого инстанса класса вообще безграмотная хуйня какая-то при первом обращении к типу вызывается статический конструктор онли, но он не порождает объект и не создает нихуя физического рантайм узнает о типе после инициализации (компиляции) его JIT-компилятором, но эта компиляция происходит не совсем в "момент первого обращения" или "первого создания"
>>902495 я прокомментировал твою цитату, естессно, я не смотрел и ничего по поводу видео не написал и не буду это вот час смотреть ради рецензии
> Мне бы пруф из какого-то источника именно про С#, если есть это исключительно вопрос внутреннего понимания собеседников "документация" https://msdn.microsoft.com/en-us/library/ms173110.aspx говорит: > An object is basically a block of memory that has been allocated and configured according to the blueprint. A program may create many objects of the same class. Objects are also called instances, and they can be stored in either a named variable or in an array or collection.
>>887274 ЛОЛ ты угораешь? То что он рассказывает обязан каждый школьник знать не то что программист. Если ты не осилил что в 1 байте 8 бит то о чем вообще говорить, Лысый как раз хороший вариант если ты тупой, но хотите вкатиться
Шапка: https://github.com/CSharpShapka/SharpHat/wiki
(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)
Прошлый тред тонет здесь: https://2ch.hk/pr/res/869105.html