Ответы пользователя по тегу C#
  • Зачем нужны делегаты?

    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 комментария
  • Какой параметр в PDF отвечает за отступ от края страницы?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    по состоянию на 02.11.2019 19:25 МСК имеем
    вопрос
    Какой параметр в PDF отвечает за отступ от края страницы?

    пояснение
    Создал два PDF файла в ворде.
    В одном PDF поставил левое поле больше, в другом - меньше.
    При просмотре видно, что поля разные, но как найти размеры полей программно?
    Пытаюсь выводить размеры ArtBox, BleedBox, CropBox, MediaBox, TrimBox и Rect, но они одинаковые в обоих документах.

    - C# упоминается только в теге
    - OpenXML SDK не упоминается вообще
    - упоминается Создал два PDF файла в ворде. со скрипом домысливая причастность к вопросу тега C#, можно предложить создавать програмно в ворде свои документы, там же править параметры страницы, после чего сохранять в pdf. думаю на изучение задачи управления парметрами страницы в ворде, должно уйти гораздо меньше двух лет
    а сохранить в pdf
    вообще элементарно
    после того как нагуглишь, у меня ушло не более вечера.
    задача была конвертировать rtf в pdf. если платные либы, но это запрещалось. все беплатное было через заднее крыльцо html, что попахивало жуткими потерями идентичности документов. при этом не запрещалось использовать word. вышло так
    internal static bool wordAsConverter(string rtf, string pdf, bool verb = true, bool clean = true)
    {
      $"\t..try convert to pdf...".print();
      var res = false;
      var app = new Application();
      try
      {
        var doc = app.Documents.Open(rtf);
        doc.ExportAsFixedFormat(pdf, WdExportFormat.wdExportFormatPDF);
        doc.Close(false);
        res = true;
        var fn = Path.GetFileName(rtf);
        if (verb) $"\t{fn} converted to pdf".print();
        if (clean)
        {
          File.Delete(rtf);
          if (verb) $"\t{fn} deleted".print();
        }
      }
      catch (Exception e) { e.Message.print(); }
      finally { app.Quit(false); }
      return res;
    }
    // что бы не смущал .print(); это уже привычка, для уменьшения многословности кода
    internal static void print(this string s) => Console.WriteLine(s);
    Ответ написан
  • Как открыть веб-страницу внутри формы приложения C#?

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

    ps для WinForms других вариантов нет. для win10 UWP встроенный WebView использует движек Edge. все встроено, докментаци в MSDN. в студии посказки, и тд
    Ответ написан
    Комментировать
  • C#.Как спарсить текст со всеми совпадениями?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    yuopi, думаю уже перебор. достаю свой вариант из каментов
    using System;
    using System.Linq;
     
    namespace parse_ip
    {
        class Program
        {
            static void Main(string[] args)
            {
                var l = Console.In.ReadToEnd()
                    .Split(Environment.NewLine)
                    .Select(s => s.TrimStart('-'))
                    .Where(s => s.Contains("IP:"));
                foreach (var s in l)
                    Console.WriteLine(s);
            }
        }
    }

    .. и использование

    ps
    для работы с произвольным стримом, вставить нужный источник вместо Console.In. хоть WebResponse.GetResponseStream(), хоть сокет.
    для работы с обычным текстовым файлом, всместо Console.In.ReadToEnd().Split(Environment.NewLine), вставить File.ReadAllLines("путь+имя").
    все.
    Ответ написан
    Комментировать
  • Для чего здесь обрезается строка?

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

    ps в точности для этого сценария, есть и встроенный способ - открываем свойства любого такого файла, и там есть пунктик копировать в выходную папку

    но если программа, во время работы изменяет содержимое дополнительных файлов, и его надо сохранить. тогда доступ в папку проекта - то что надо
    Ответ написан
    Комментировать
  • Чем заменить printf_s("%.0lf", s) в C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а так https://docs.microsoft.com/ru-ru/dotnet/standard/b... ?

    ps если сложности с языком "потенциального противника", ищите в урле МСДН фрагмент en-en (может даже en-us) и заменяете на ru-ru. правда бывают страницы для которых даже машинного перевода еще нет. но редко

    еще совет, попробуйте использовать вместо doubleBiginteger
    а то (покоцано, double не заметил, а аналога в шарпе нет)
    выхлоп приведенного фрагмента, даже для C++ не выглядит правдоподобным. double плюсов имеет не более 15 знаков точности https://docs.microsoft.com/ru-ru/cpp/cpp/data-type... а у вас там явно в разы больше

    а 15 знаков точности, таки 6,82455418022865E+86 как раз и будет. что для плюсов, что для шарпа ;)))
    ответ у вас точно из другого источника, совсем не из плюсов. даже excel имеет что то в районе 30 знаков точности, что совпадает с decimal

    pps у вас там 87 знаков. вот пруф https://dotnetfiddle.net/LRji4y
    так что приведеный фрагмент плюсов нервно курит. он тоже не может дать ни чего кроме 6,82455418022865E+86, по тому что использует double. чем заменить в плюсах не знаю.но раз вопрос о шарпе, повторюсь - заменяйте на

    .. раз аналога long double в шарпе нету, берем Biginteger и проверяем https://dotnetfiddle.net/UC8Qwi

    так что ни какой особый спецификатор формата не нужен. это категорически только вопрос точности вычислений. но он еще интереснее. плюсы (у меня тоже)
    выдают
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int k = 50;
    	//cin >> 50; кстати доставляет
    	// по тому и предположил сразу k = 50
    	long double s = 36 * pow(55, k - 1);
    	printf_s("%.0lf", s);
    }

    682455418022864774674923808460655749191222515615160719133685961958626840651329615953920
    а
    шарп
    using System;
    using System.Numerics;
    
    namespace big_int_net
    {
        class Program
        {
            static void Main(string[] args)
            {
                var s = 36 * BigInteger.Pow(55, 49);
                Console.WriteLine(s);
            }
        }
    }

    682455418022864824778975492858747729001539122984270520078098343219608068466186523437500

    это снова вопрос точности. кто косячит. пока не готов сказать бинго!
    float double на таких больших значения как раз и дает ошибку - верны только старшие 22 знака из 87 (!!!). а BigInteger данное выражение считает точно.
    пруф - https://www.wolframalpha.com/input/?i=36*55%5E49
    Ответ написан
    Комментировать