Ответы пользователя по тегу C#
  • Почему необходимо приводить те или иные множества к IEnumerable? И Как использовать IReadOnlyCollection?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    да фигня это все
    IEnumerable<T> нужен тогда и только тогда, когда нужны асинхроннные или ленивые вычисления, по тому что метод возвращающий IEnumerable<T>, имеет право возвращать не весь набор, а возвращать экземпляры T поштучно, вот так
    yield return (T)foo;
    а вот уже эта фича, открывает много новых и интересных возможностей для параллельного программирования
    Ответ написан
    Комментировать
  • Чем занимается .NET программист?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    пишет программы, на C#, VB.NET или F#, или на нескольких из эти языков. есть экзотика типа ironPython или PHP.NET, но это редко. есть даже Lisp и Prolog. это обычно как доролнение к майнстриму, перчисленному выше.
    на dotnet можно создаать и полноценный десктопны софт. и, бэкенд к мобайлу или вебу. можно создваать игры, особенно в Unity. есть целая инфрвраструктура для встраиваемых устройств и робототехники
    по мере становления dotnrt core, бэк на дотнете сстановится еше и кроссплатформунным
    и это еще наверняа не все
    Ответ написан
    3 комментария
  • Как из листа взять все числа в случайном порядке, без повторений?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    почему то значения в r1 r2 другие, хоть и приближенные

    правильно
    Random.Range(numbers[0], numbers[2]);
    никогда (или с очень малой веорятностью) не вернет ни numbers[0], ни numbers[2]. вы же задаете их как границы диапазона будущего случайного значения. обычно вы получите действительно значение где то между границ

    немого забегая вперед, раз уж у вас cлучайное значение, то numbers.Remove(r1); скорее всего ни чего не удаляет из списка. для удаления надо укзать значение, которое там действительно существует

    а r3 всегда равен min

    естественно (причины выше, вы никогда, ни чего не удаляе из списка)
    numbers = new List<float>() { min, mid, max };
    ...
    r3 = numbers[0];


    вероятно вам надо что то в этом духе
    numbers = new List<float>() { min, mid, max };
    // тут без изменений
    // далее различаем индексы и сами значения
    i1 = Random.Range(0, numbers.Count-1);
    r1 = numbers[i1]
    numbers.RemoveAt(i1);
    // ну или как вариант
    i_n = Random.Range(0, numbers.Count-1);
    r_n = numbers[i_n]
    numbers.Remove(r_n);
    // как видите, ни одной строки не убавилось. а удаление по индексу точно быстрее
    // полную совместимость с Unity это уж сами проверьте
    // естественно n ни когда не должно превышать исходного размера списка
    // и еще - средства раскраски синтаксиса напомнили in это зарезервированное
    // ключевое слово ;))


    ps и хочу предупредить - я не в курсе как в юнити с авто приведениями типов. беглое гугление, поазало, что Random.Range() возвращает float, а в качестве индекса должно использоваться int. в традиционном дотнете, приведение местами пойдет автоматически, но где то придется использовать явные приемы приведения типов

    pps
    freeExec, в каментах, утрверждает что верхняя граница ни когда не возваращается рандомайзером
    если это действительно так, можео смело шпарить
    ...i_n = Random.Range(0, numbers.Count);
    на любой фазе. ведь numbers.Count всегда вернет актуальное значение размера. его нельзя использовать в качесве индекса. но нас только что заверили, что рандомайзер не возвращает верхнюю грницу. значит такой код и короче и корректнее
    Ответ написан
    3 комментария
  • Как написать асинхронный конвеер на c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну так IEnumerable<> и yield вам в помощь. само собой и async/await
    как раз эти четыре понятия и придназначены, для упрощения написания кода, над массивами даннх, растянутыми во времени, и не известной длинны. с их помощью, большая часть кода, выглядит так, будто все входные данные предоставлены сразу, и результат вы выдаете как будто тоже сразу

    ps для практики полезны примеры из MSDN (где они есть) либо на https://metanit.com/sharp/tutorial/ придется поискать. в любом случае, однозначно придется понять обсласти применения и возможности этих понятий. а тогда уже точно сложится картина, как они лягут на ваш конкретный случай

    pps
    Ссылки от того куда положили возвращаем в виде коллекции тому кто нас вызвал.
    вот это место не очень вписывается в концепцию конвеера на IEnumerable/yield/async/await
    дело в том что результирующие ссылки, вы получаете "изредка", и явно в отрыве от момента получения исходного изображения
    тут несколько путей:
    - именно коллекцию ссылок (json?) формировать по окончанию обработоки
    - возвращать в первоисточник ссылки по одной, и формировать коллекцию там, а привязку можно делать по имени/тегу/коду/номеру изображения.. (кадра?)
    - можно и асинхронно, растянуто во времени досылать json, или любую выбранную коллекцию дотнета, если на приемнике дотнет, и вы так же правите исходниками
    - как вариант, если известно количество кадров изначально, можно уведомлять первоисточнк о начале пересылки хоть массива заданной размерности, в любом понятном ему формате, если конечно он так же способенн к асинхронной обработке

    ppps
    Пробовал с BlockingCollection
    повторюсь, на сколько я уловил вашу задачу, кроме IEnumerable<>, в подобном конвеере в принципе ни че больше не нужно. ну или разве что как вы там результат решите формировать. но и для результата, даже для накопителя, из дотнетовских конструкций, того же IEnumerable<> за уши, а из него, если кончно это требуется, можно и json формировать
    Ответ написан
    6 комментариев
  • Распознавание образов с окна игры?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    - вы можете покадрово снимать буффер экарана (не просите код. гугл в помщ. и отдавайте предпочтение ссылкам сразу на MSDN ))). это лишь указание "куда смотреть")
    - ну а потом "разглядывать его "нейронками". или чем научитесь ))

    ps мои личные достижения - грабинг обычной гуевой программы с текстовыми полями. но необычной тем, что она была создана на Qt for windows, то есть добраться до контента элементов по дереву хендлов, возможности не было ни какой. так и вознигла идея грабинга битмаповского буффера. на этом сходство с вашей задачей, могло бы закончиться,.. далее шрифт распознавал "домашними" алгоритмами. позднее, по срокам, на которы все это растянулось, стало очевидно, что можно было смело грызть нейронки сразу. но, не смотря на некоторый прогресс, клиент уже перегорел ))
    возможность применения нейронок была бы вторым, возможным сходством. в обоих измерениях, моя задача, возможно была существенно проще.
    Ответ написан
    Комментировать
  • Зачем нужны делегаты?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    тут все просто:
    - хочешь, учи C#
    - хочешь учи C++

    ps прямой ответ на вопрос эелементарно ищется на MSDN, куче учебных сайтов и в книгах
    pps ну или готов подискутировать в каментах.
    начнем со встречного вопроса - зачем вам C#? если так симпатичен C++. прошу развернутого ответа
    Ответ написан
    6 комментариев
  • Как сделать вывод лога работы в XML файл на c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    там пример есть как писать. как резать, если 24/7 - ваше творчество
    а вообще вряд ли самый удобный формат для логов
    Ответ написан
    Комментировать
  • План изучения C# чтобы стать C# junior - как улучшить?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - все перечеркнуть и начать действовать
    2 - потом можно достать скомканый черновик из корзины.. ну и допустим добавить функциональная парадигма (куда вы без LINQ уедете?.. хотя LINQ это еще далеко не вся потенциально возможная функциональщина)
    Ответ написан
    2 комментария
  • Какие есть библиотеки для рендеринга и скриншота веб-сайтов?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    cef#. в тч "безголовый" режим (минимальная консольная демка кажется как раз скриншотит)

    ps а вообще до дури всего. гугли "встраиваемые браузеры", "веб-боты", "тестирование веб ui". скриншотинг умеют практически все, кто достоин внимания
    Ответ написан
    Комментировать
  • Как обработать ошибки в трёх вложенных циклах?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    и?
    разбейте на 3 логических уровня и разнесите в 3 метода
    все сразу станет кошерно

    ps или censored сделате один try-catch, но анализируйте exception .. вариантов вообще то море
    Ответ написан
    Комментировать
  • Как найти библиотеки в c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    2 комментария
  • Как создать команду срабатывающуюся при наведении?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вам в своей программе? если да и wpf, см в гугле так
    https://www.google.com/search?q=wpf+mouse+event

    если формы - просто правим запрос

    если хотите общесистемно - в общем случае вам надо создать демона (в винде принято называть служба) для отслеживания событий мыши, при этом фильтровать объекты которые на переднем плане. но тоже все реально
    Ответ написан
    Комментировать
  • Стоит ли читать эту книгу?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    для
    большего понимания языка
    нужна практика. про книги - тот кто хочет узнать нечто, читает все что под руку попадется*. тот кто не хочет ни читать, ни кодить, (upd даже гуглить сам не хочет ;) тот и задает вопросы "а как мне ни чего не делая, сразу в сеньеры попасть"?

    ps * - если какую то книгу хвалят, это хорошо. в данном случае, вы упоминаете книги, у которых заведомо разная цель (по крайней мере по названиям). даже при возможном сходстве оглавления, "CLR via C#" больше ориентирована на раскрытие подкапотного устройства дотнет (CLR же). "Справочник по С# 7.0 полное описание" - вы не сообщаете автора, а мне тоже в лом гуглить.. в общем случае справочник, все таки не обучающее пособие для новичков, а подручная книга для того кто уже начал кодить самостоятельно, и постоянно этим занимается
    но как я попытался намекнуть выше, если вы хотите изучать (а если еще и смекалкой не обделены) - читайте все что под руку попадется, и тут же пробуйте. и сравнивайте. сравнение очень крутой опыт. в этом случае не важно, лучшая ли у вас книга. да и вообще - книги катастрофически отстают от реальности. возмитете любую доступную книгу, но добавтьте просмотр хабра по тематическим тегам, и не ленитесь нажимать кнопку F1 в визуал студии (будете знакомиться с МСДН**). так и формируется собственный опыт

    ** частенько МСДН, это истина в конечной инстанции. хотя не всегда легокопереваримая

    pps только на ютуб не ведитесь. там конечно есть и записи с конференций профи (чумовые) но до них дорасти надо. а по запросам вылезает море пены от школоты. имхо
    Ответ написан
    2 комментария
  • Как передать массив с одной формы в другую (c#)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    если вы хотите работать с одними и теми же данными в разных формах, лучше что бы они существовали где то отдельно, возможно в качестве поля в главной форме, с типом:
    - массив для простого случая, далее по усложнению задачи
    - таблица данных https://docs.microsoft.com/ru-ru/dotnet/api/system...
    - база данных https://docs.microsoft.com/ru-ru/ef/

    а в гридах делать биндинг. тагда все экземпляры datagridview будут работать с одним источником, и даже отображать изменения, внесенные в другом гриде
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    https://metanit.com/sharp/entityframework/3.1.php
    Ответ написан
    Комментировать
  • Как упростить переменную в C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а еще можно сделать расширение
    для приведенного фрагмента что то типа
    public static string b64toASCII(this string s) => Encoding.ASCII.GetString(Convert.FromBase64String(s));

    преобразуем исходный фрагмент
    LocalData + "Тут".b64toASCII(), 
                LocalData + "Все ".b64toASCII(), 
                LocalData + "значения".b64toASCII(), 
                LocalData + "будут".b64toASCII(), 
                LocalData + "совершенные".b64toASCII(), 
                LocalData + "Разные".b64toASCII(),


    ps base64 явно не нужен для литералов набранных в редакторе. они вообще не требуют дополнительной обработки. это похоже на данные получаемые из сети к примеру. если разделение запятой не ошибка, значит формируется массив. и если LocalData постоянное значение для массива, можно еще и LINQ притянуть
    // сначала собираем base64 данные в массив. с большой вероятностью такой код будет проще
    // пока в нем нет обработок.
    // допустим этот массив называется b64data. тогда итоговый массив можно получить одной строкой
    var target = b64data.Select(x => (LocalData + x.b64toASCII())).ToArray();
    // ToArray() можно заменить на ToList() при желании,
    // но если и дальше использовать LINQ, проще так и шпарить IEnumerable<string>
    // в смысле убрать .ToArray() вообще
    Ответ написан
    Комментировать
  • Можно ли после изучения синтаксиса С#, перейти к изучению ASP.NET?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    можно даже совместить. все зависит от того на сколько быстро и правильно вы понимаете. если тяжело идет, тогда не стоит

    при этом разбить на этапы "сначала это, потом то, а потом только asp" достаточно четко невозможно.
    а изучение на практике может быть вполне эффективным
    Ответ написан
    5 комментариев
  • Можно ли в 1С использовать кастомный UI?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1С монолитная платформа для решения бизнес задач, как следствие:
    - там не до свистоперделок
    - обычно там предпочтительнее что бы юзерэкпириенс не ломался
    - в части нестандартных графиков/отчетов - webview, и js либы вэлкам. и все равно гораздо чаще делают вебсервисы, которые используют 1С как бэк (в тч наверное по тому что webview там все еще на ослике)
    Ответ написан
    2 комментария
  • Какой смысл использовать IEnumerable?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    главная фишка IEnumerable это возможность создавать параллельную конвеерную обработку легкочитаемым кодом. переводя на кухонный язык - если функция возвращает IEnumerable<что то там> из относительно медленного источника (БД, сложная обработка) она может делать yield return <что то там> поштучно. если эта функция оформлена как асинхронная, то вызывающий код, может быть написан, так, как будто просто получает IEnumerable<что то там> сразу, но с ключевым словом await. в итоге вызывающий код, и код поставщик данных, будут обрабатываться параллельно

    весь LINQ построен на IEnumerable, не только как на типе посреднике между типовыми обработками наборов данных, имеющих не известный заранее размер (тут бы и List справился), но и на возможности создавать асинхронные перегрузки для основных методов LINQ

    ps yield return вообще мощная штука. даже без async/await. как пример yieldprolog.sourceforge.net
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    oZGq8xg.png
    Ответ написан
    Комментировать
  • В С# не работает using System.Windows.Forms; как его подключить?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    COM->System.Windows.Forms
    это не COM
    .net Core, Visual Studio 2019, создаю проект в консоли(так ведь можно)
    можно, но только когда вы знаете что делать дальше. а сейчас очевидно что не знаете:
    - в .net Core формы поддерживатся с версии самой корки 3.*
    - .net Core 3.* поддерживается начиная с Visual Studio 2019 (и то начиная со свежих билдов, осенних)
    - визуального редактора форм на данный момент не существует
    - есть руководство https://docs.microsoft.com/ru-ru/dotnet/core/porti... (что подключать там тоже написано)

    совет - если вы только начинаете изучать программирование, не готовы осваивать XAML и нуждаете в визуальном редакторе форм, практикуйтесь сначала в .Net Framework, и используйте шаблон проекта WinForms
    Ответ написан
    3 комментария