Ответы пользователя по тегу C#
  • Как нормализовать массив значений в цветовое представление?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    https://learn.microsoft.com/ru-ru/dotnet/framework...
    https://habr.com/ru/articles/590475/

    .. совет - пока не поймете, в тч на экспериментах, используйте режимы по умолчанию ))

    ps пример - мой старый десктоп 4 ядра, новый ноут 20 ядер.. при попытке что то оптимизировать, даже успешной, потеряю универсальность.. а выбор рантайма будет весьма близок к лучшему возможному. как то так..
    Ответ написан
    2 комментария
  • Как организовать параллельную обработку пересечения нескольких Rectangle в WPF?

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

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

    pps если не используете биндинг, можно логику обратного времени - копируем текущее поколение в фоновый массив/матрицу, далее используем вычисление следующего поколения на основе неизменных исходных данных.
    .. и еще о производительности - на сколько я помню жизнь, у вас затраты на визуализацию все равно не соизмеримо больше обсчета ;)))
    Ответ написан
    4 комментария
  • Как изменить свойства Label при помощи кода другого файла одного и того же проекта?

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

    ps по факту корень зла Form1 fr1 = new Form1();.. очень печальный симптом..
    Денис Куликов, - еще раз, я готов позаниматься с вами.. но надо убрать понты и сотрудничать.. если что - в моем профиле телега. об оплате речь не стоит.. чистое сочувствие..

    pps
    начните с такой правки
    ...
    Screen[] sc = Screen.AllScreens;
    //  Form1 fr1 = new Form1();
    // тут внимательно сравните две следующие строки
    //  fr1.Location = sc[0].Bounds.Location;
    Location = sc[0].Bounds.Location;
    Application.EnableVisualStyles();
    // ... далее доступ к полям формы в таком же стиле - просто по имени
    // watcher у вас тоже уже есть. отдельный класс не нужен,
    // сначала запустите простейший тест, совершенствуйте после первого успеха
    ...
    .. хотя про watcher то что мелькнуло вроде локальная переменная метода. просто сделайте полем класса формы. в своем файле, дизайнер не трогаем. задаем поле формы, а инициализируем экземпляр и настройки так как уже начато.. и смотрим что там будет ломаться дальше )))
    .. был бы проект ))
    ... кидал бы поэтапные правки с каментами после дебага ;)... а вы все в крутизну играете? ))).. дедлайн и тд )))
    Ответ написан
  • На сколько Java отличается в обозначении типизации от C# для понятия TS?

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

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Сергей, до боли знакомая "кодировка"
    смотрим шпаргалку
    657dc0bcf3a83789501656.png
    вроде как utf-8 -> win-1251 собственно и была какое то время самой часто ошибкой.
    скорее всего надо копать в браузере, все что угодно, даже смену дефолтного шрифта проверить.
    в каментах под вопросом, допустил неоднозначность кодировки на серверной стороне самих файлов. вроде как менее вероятно. все популярные редакторы разработчиков/дизайнеров, давно в utf-8. да и визуал студия вроде как уже много лет корректно работает с веб проектами.
    начните с браузеров. если все по дефолту.. все таки посмотрите и исходники. far manager очень хорошо определяет и показывает реальную кодировку. mc вроде тоже.

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

    pps браузер точно не "ослик"? (интернет эксплорер в вин7?... тогда подобная ошибка была бы более ожидаема.. ну так.. мало ли?)
    Ответ написан
    1 комментарий
  • Почему в новом проекте не генерируется файл Themes/Generic.xaml?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Pixilys,
    один из трех создает шаблон, дальше думайте сами ;)
    e6Ewo7B.pngIJXy8BX.png
    Ответ написан
    Комментировать
  • Как прочитать адреса S7 - 1500 с помощью .NET?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а так не пробовали?
    if (expression)
        product = "хрен поймешь по вашей логике";

    cozrF1q.png
    может
    if (expression)
        product = product.ToUpper();
    ???
    Ответ написан
    Комментировать
  • Как читать данные из файла?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    что то примерно так (без теста)..

    var lst = File.ReadAllLines("bla..bla..bla");
    foreach (var s in lst) {var toks = (s).Split(':'); ...;};
    при работе с чистым текстом StreamReader в общем то и не нужен (!! важно, при больших объёмах файлов, чтение целиком, может критично расходовать память, в этом случае снова см ответ Василий Банников)
    по большой просьбе автора вопроса ))
    namespace list_and_parse
    {
        internal static class Program
        {
            internal static void Main(string[] args)
            {
                var lst = File.ReadAllLines("FileName.conf");
                foreach (var s in lst)
                {
                    var toks = s.Split(":");
                    string check() => (toks[0] == "Volume", toks[0] == "IsMarkers", toks[0] == "Mouse") switch
                    {
                        (true, _, _) => $"Volume={float.Parse(toks[1])}",
                        (_, true, _) => $"IsMarkers={bool.Parse(toks[1])}",
                        (_, _, true) => $"Mouse={int.Parse(toks[1])}",
                        _ => ".. ups (("
                    };
                    check().print();
                };
            }
            internal static void print(this string s) => Console.WriteLine(s);
        }
    }
    ... чуть ближе к реальному применению ))
    namespace list_and_parse
    {
        internal static class Program
        {
            internal static void Main(string[] args)
            {
                var Volume = 0.0;
                var IsMarkers = false;
                var Mouse = 0;
    
                var lst = File.ReadAllLines("FileName.conf");
                foreach (var s in lst)
                {
                    var toks = s.Split(":");
                    string check() => (toks[0] == "Volume", toks[0] == "IsMarkers", toks[0] == "Mouse") switch
                    {
                        (true, _, _) => $"Volume=>{double.TryParse(toks[1], out Volume)}",
                        (_, true, _) => $"IsMarkers=>{bool.TryParse(toks[1], out IsMarkers)}",
                        (_, _, true) => $"Mouse=>{int.TryParse(toks[1], out Mouse)}",
                        _ => ".. ups (("
                    };
                    check().print();
                };
                "".print();
                $"Volume={Volume}".print();
                $"IsMarkers={IsMarkers}".print();
                $"Mouse={Mouse}".print();
            }
            internal static void print(this string s) => Console.WriteLine(s);
        }
    }
    Ответ написан
  • Как сделать так, чтобы дополнительные проекты-библиотеки могли обращаться к тем же библиотекам, что и основной проект решения?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    к автору - вам явно пока не достает понимания зависимостей.
    но есть лазейка для обхода зависимостей при компиляции - скриптование во время выполнения )))
    опять же это довольно высокий уровень игры ;))
    Ответ написан
    Комментировать
  • Как подключить firebase к .net Maui?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1. При подключении проект никак не может найти файл google-services.json, не смотря на то, куда я его только не пихала. Он как находился в корневой папке проекта, как и в папке Android.
    для начала посмотрите свойства проекта и целевую папку компиляции (могут быть две - debug и release, на этапе разработки по дефолту debug). попробуйте положить туда.
    если поможет - можете включить google-services.json в состав проекта, в любом удобном для разработки расположении. потом в свойствах файла (обозреватель решений) указать что то вроде "копировать в выходной каталог" (просто по памяти цитирую). соответственно и файлик можно править прямо в студии, и копироваться будет при каждой пересборке. уже как в дебаг, так и в релиз, и при публикации на внешний ресурс/устройство.

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

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

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

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

    pps если вы освоили примеры с ms sql (ms sql exprees), вы все равно не можете включить ядро субд в экзешник. не тот случай. только sqlite или что еще более легкое
    Ответ написан
    Комментировать
  • Как работает код на C# в приведённом примере?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а еще можно освоить пошаговую отладку, и посмотреть что прилетает в
    validNumber = int.TryParse(readResult, out numValue);
    после чего и думать ;)
    ну или так ))
    namespace ConsoleApp4
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                string? readResult;
                int numValue;
    
                Console.Write("Enter an integer value between 5 and 10: ");
    
                do
                {
                    readResult = Console.ReadLine();
                    bool validNumber = false;
                    validNumber = int.TryParse(readResult, out numValue);
    #if DEBUG
                    Console.WriteLine($"debug 'numValue='{numValue}");
                    Console.WriteLine($"debug 'validNumber='{validNumber}");
    #endif
                    if (validNumber == true)
                    {
                        if (numValue < 5 || numValue > 10)
                            Console.Write($"You entered {numValue}. Please enter a number between 5 and 10: ");
                    }
                    else Console.Write("Sorry, you entered an invalid number, please try again: ");
    
                } while (numValue < 5 || numValue > 10);
    
                Console.WriteLine($"Your input value ({numValue}) has been accepted.");
            }
        }
    }
    ваш код работает абсолютно корректно, что смутило не понятно вообще ))
    2WhBpyZ.png

    ps подправил код, еще лайфхак, может понравится ;))
    pps и еще по мелочи, может понравится ;)
    namespace ConsoleApp4
    {
        internal static class Program
        {
            static void Main(string[] args)
            {
                var numValue = 0;
                var inValidValue = false;
                var validNumber = false;
                "Enter an integer value between 5 and 10:".print();
                do
                {
                    validNumber = int.TryParse(Console.ReadLine(), out numValue);
                    inValidValue = numValue < 5 || numValue > 10;
    #if DEBUG
                    $".. debug 'numValue={numValue}'".print();
                    $".. debug 'validNumber={validNumber}'".print();
                    $".. debug 'validValue={inValidValue}'".print();
    #endif
                    if (validNumber)
                    {
                        if (inValidValue)
                            $"You entered {numValue}. Please enter a number between 5 and 10: ".print();
                    }
                    else "Sorry, you entered an invalid number, please try again: ".print();
                } while (inValidValue);
                $"Your input value ({numValue}) has been accepted.".print();
            }
            static void print(this string s) => Console.WriteLine(s);
        }
    }

    .. почувствуйте разницу ;)))

    ppps .. кхм.. думал извращения закончились )))
    namespace fanc_minimal
    {
        internal static class Program
        {
            static void Main(string[] args)
            {
                string checkValue(bool goodValue, bool correctNumber, int Value) => (goodValue, correctNumber) switch
                {
                    (true, true) => $"Your input value ({Value}) has been accepted.",
                    (false, true) => $"You entered {Value}. Please enter a number between 5 and 10:",
                    _ => "Sorry, you entered an invalid number, please try again:"
                };
    
                Console.WriteLine("Enter an integer value between 5 and 10:");
                for (var validValue = false; !validValue; )
                {
                    var validNumber = int.TryParse(Console.ReadLine(), out var numValue);
                    Console.WriteLine(checkValue(validValue = numValue >= 5 && numValue <= 10, validNumber, numValue));
                }
            }
        }
    }
    но это пример оголтелого минимализма строк ))
    читаемость уже резко страдает... зато в одном флаконе много фишек, которых в книгах не найти. всем успехов в кодировании ))
    .. продолжаем издеваться над стереотипами ;))
    namespace func_next
    {
        internal static class Program
        {
            static void Main(string[] args)
            {
                const int min = 5;
                const int max = 10;
                var value = min - 1;
                var stop = false;
    
                bool success() => value >= min && value <= max;
    
                string check() => (int.TryParse(Console.ReadLine(), out value), stop = success()) switch
                {
                    (true, true) => $"Your input value ({value}) has been accepted. Press Enter to Exit )))",
                    (true, false) => $"You entered {value}. Please enter a number between 5 and 10:",
                    _ => "Sorry, you entered an invalid number, please try again:"
                };
    
                for ("Enter an integer value between 5 and 10:".print(); !stop; check().print()) ;
            }
            static void print(this string s) => Console.WriteLine(s);
        }
    }
    .. и снова.. лишь пример перфекционизма.. но код содержит взаимозависмости, не допустимые в большом проекте ))
    .. но уж сильно захотелось уйти от вложенных if .. ну и показать мощь сишныхfor )))
    ... тут уже скорее ретушь.. чуть поближе к продашен стилю
    namespace func_next
    {
        internal static class Program
        {
            static void Main(string[] args)
            {
                const string welcome = "Enter an integer value between 5 and 10:";
                const int min = 5;
                const int max = 10;
                var value = min - 1;
                var stop = false;
    
                bool success() => value >= min && value <= max;
                bool valid() => int.TryParse(Console.ReadLine(), out value);
    
                string check() => (valid(), stop = success()) switch
                {
                    (true, true) => $"Your input value ({value}) has been accepted.",
                    (true, false) => $"You entered {value}. Please enter a number between 5 and 10:",
                    _ => "Sorry, you entered an invalid number, please try again:"
                };
    
                for (welcome.print(); !stop; check().print()) ;
            }
            static void print(this string s) => Console.WriteLine(s);
        }
    }
    .. кхи.. перфекционизм цветет.. но сам не ожидал некоторых вещей )) .. но тут уже и логика прозрачная и читаемая ))
    namespace func_next
    {
        internal static class Program
        {
            static void print(this string s) => Console.WriteLine(s);
            static void Main(string[] args)
            {
                const int min = 5;
                const int max = 10;
                var value = min - 1;
    
                string welcome() => $"Enter an integer value between {min} and {max}:";
                string accepted() => $"Your input value ({value}) has been accepted.";
                string repeat() => $"You entered {value}. Please enter a number between {min} and {max}:";
                const string ups = "Sorry, you entered an invalid number, please try again:";
    
                bool valid() => int.TryParse(Console.ReadLine(), out value);
                bool success() => value >= min && value <= max;
    
                var stop = false;
    
                string check() => (valid(), stop = success()) switch
                {
                    (true, true) => accepted(),
                    (true, false) => repeat(),
                    _ => ups
                };
    
                for (welcome().print(); !stop; check().print()) ;
            }
        }
    }
    шарм ситуации в том, что тушка программы сводится к строкеfor (welcome.print(); !stop; check().print()) ; а все остальное - лишь определение "понятий"... обожаю функциональный стиль ))
    ..чем дальше в лес, тем веселее ))
    namespace func_next
    {
        internal static class Program
        {
            static void print(this string s) => Console.WriteLine(s);
            static void Main(string[] args)
            {
                var min = 5;
                var max = 10;
                var value = min - 1;
    
                string welcome() => $"Enter an integer value between {min} and {max}:";
                string accepted() => $"Your input value ({value}) has been accepted.";
                string repeat() => $"You entered {value}. Please enter a number between {min} and {max}:";
                const string ups = "Sorry, you entered an invalid number, please try again:";
    
                var valid = false;
                bool get() => valid = int.TryParse(Console.ReadLine(), out value);
                bool success() => value >= min && value <= max && valid;
    
                var stop = false;
    
                string check() => (get(), stop = success()) switch
                {
                    (true, true) => accepted(),
                    (true, false) => repeat(),
                    _ => ups
                };
    
                for (welcome().print(); !stop; check().print()) ;
            }
        }
    }
    .. тут уже полшага до модификации min/max на ходу ;))
    ... как и было обещано.. но см в каментах.. ответ превысил 10к символов ;))
    uznwPSD.png

    (примеры реализованы в vs 2022, dotnet 8, по тому и без юзингов )) .. но каждая версия из ответа и каментов, испытана в студии, абсолютно рабочая, и все идентичны по поведению исходному коду вопроса ))
    Ответ написан
  • Как сделать новую static переменную в наследнике? Или как обойтись без этого?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а вы уверенны что хорошо понимаете смысл static?
    вам нужен уникальный id для класса? или экземпляра?
    подумайте и почитайте доки.
    для класса достаточно объявлять readonly а не static

    ps а для экземпляра и подавно рандомный readonly

    pps по ходу static id предка будет наследоваться для всех. это суть static
    Ответ написан
    Комментировать
  • Как по другому сделать?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    структуры значимые данные, и возвращаются на стеке. сделайте A классом, и случится магия ;)
    Ответ написан
    Комментировать
  • Как узнать запущен ли процесс в C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    смотря какая версия винды, для вин 10/11, калькулятор, это приложние "магазина" см скрины под спойлерами
    ищем процесс
    jFtyPpy.png
    уточняеи имя
    7CoiQxS.png
    правим код
    using System.Diagnostics;
    
    if (Process.GetProcessesByName("CalculatorApp").Length > 0)
        Console.WriteLine("калькулятор запущен");
    else
        Console.WriteLine("калькулятор не запущен");
    наслаждаемся успехом
    2SrzM8q.png
    настоятельно рекомендую расширение Visual Studio Spell Checker
    а то местами глаз режет... u9hUZ9n.png
    Ответ написан
    Комментировать
  • WinForms не подхватывает впн, почему?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в дополнение к ответу TheAndrey7, в качестве системного vpn, можете опробовать ProtonVPN
    одна из приятных фишек - можно не сажать на тормоза всю систему, а указать конкретные приложения (браузеры на выбор, а так же ваше приложение)
    Ответ написан