Ответы пользователя по тегу C#
  • Как подключить 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
    одна из приятных фишек - можно не сажать на тормоза всю систему, а указать конкретные приложения (браузеры на выбор, а так же ваше приложение)
    Ответ написан
  • Как найти нужную мне папку перебрав все файлы на компе на C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    по случаю )))
    раз уж так совпало, дарю пример старого, возможно несколько сумбурного кода
    ... учитывайте что это расширение, а не метод
    .. да и вообще код сильно ориентирован на использование расшиений и функциональной парадигмы
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    
    namespace ff.links
    {
        static partial class Program
        {
            static IEnumerable<string> scan(this IEnumerable<string> ds)
            {
                var files = new List<string>();
                foreach (var d in ds)
                    try { files.add2my(d.here()).add2my(d.subdirs()); }
                    catch (Exception e) { Console.WriteLine($"{pfx}Scan \"{d}\" - {e.Message}"); }
                return files;
            }
            static List<string> add2my(this List<string> l, IEnumerable<string> r) { l.AddRange(r); return l; }
    
            static IEnumerable<string> here(this string d) => Directory.EnumerateFiles(d).Where(f => f.isTarget());
            static IEnumerable<string> subdirs(this string d) => Directory.EnumerateDirectories(d).Where(p => !p.isIgnored()).scan();
    
            static void print(this string s, string pfx = "", string sfx = "") => Console.WriteLine(pfx + s + sfx);
            static void print(this IEnumerable<string> sa, string pfx = "", string sfx = "") => sa.ToList().ForEach(s => s.print(pfx, sfx));
            static bool isTarget(this string p) => targets.Contains(p.Split(backSlashDelimiter).Last());
            static string[] targets => new string[] { ffBinary, ffProfileSign, fflConfig };
    
            const string fflConfig = "ff.links.cfg.json";
            const string ffBinary = "firefox.exe";
            const string ffProfileSign = "compatibility.ini";
            const string skipd = ".default";
    
            static bool isIgnored(this string p) => ignored.Contains(p.Split(backSlashDelimiter, StringSplitOptions.RemoveEmptyEntries).Last());
            static string[] ignored => new string[]
            {
                "TorBrowser", "Microsoft", "MICROSOFT",  "WindowsApps",  "Windows", "WINDOWS",
                "ProgramData", "All Users", "Documents and Settings", //"Users",
                "My Documents", "My Pictures", "My Music", "My Videos", "Application Data",
                "Start Menu", "Local Settings", "Cookies", "NetHood", "PrintHood", "Recent", "SendTo", "Templates",
                "CrashReports", "WindowsImageBackup", "System Volume Information", "$Recycle.Bin", "$RECYCLE.BIN",
                "root", "Default User"
            };
    
            static char[] backSlashDelimiter = new char[] { backSlash };
            const char backSlash = '\\';
    
            static IEnumerable<string> fromRoot() => Environment.GetLogicalDrives().Where(p => !p.isIgnored());
            static IEnumerable<string> fromSysDrive() { yield return @"c:\"; }
            static IEnumerable<string> fromTypical()
            {
                var path = $@"{Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)}\Mozilla Firefox";
                yield return path;
                int p;
                if ((p=path.IndexOf(" (x86)")) >= 0)
                    yield return path = path.Remove(p, 6);
                path = $@"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\Mozilla\Firefox\Profiles";
                yield return path;
            }
        }
    }
    ну и как ни крути, без примера использования ни куда..
    using System;
    using System.Diagnostics;
    using System.Linq;
    
    namespace ff.links
    {
        static partial class Program
        {
            static void Main(string[] args)
            {
                var sw = new Stopwatch();
                sw.Start();
                "let's begin...".print();
    
                var finds = fromTypical().scan();
                "found targets is ".print(pfx, finds.Count().ToString());
                //finds.print();
                var bro = finds.Where(b => b.Contains(ffBinary));
                "found browsers is ".print(pfx, bro.Count().ToString());
                bro.print(pfx);
                var cfg = finds.Where(b => b.Contains(fflConfig));
                "found configs is ".print(pfx, cfg.Count().ToString());
                cfg.print(pfx);
                var profiles = finds.Where(b => (b.Contains(ffProfileSign) && !b.Contains(skipd)));
                "found profiles is ".print(pfx, profiles.Count().ToString());
                //profiles.print();
    
                profiles.buildLinks(bro.First());
                //profiles.prefsApplay();
    
                //links2start();
                sw.Stop();
                var ts = sw.Elapsed;
                $"RunTime {ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}".print();
    //#if DEBUG
    //            "press any key to continue...".print();
    //            Console.ReadKey();
    //#endif
            }
            const string pfx = "  ::> ";
        }
    }
    пример поиска по всему диску C:
    var finds = @"C:\".scan();
    Ответ написан
    Комментировать
  • Где можно брать примеры консольных приложений?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    лишь как дополнение:
    https://rsdn.org/summary/1691.xml (увы, все устаревшее, но фишки можно и найти..
    https://metanit.com/sharp/tutorial/
    https://docs.microsoft.com/ru-ru/dotnet/csharp/
    Ответ написан
    Комментировать
  • Как обработать неправильный ввод в textbox?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Комментировать
  • Как прочитать по 11 бит?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    2 комментария
  • Нужна ли математика .net разработчику?

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

    ps другой вопрос, на рынке труда, львиная масса вакансий, все таки таковы, как описал Vabkab

    * речь не об учете бухгалтерском, или товарном. но о любой толковой оптимизации, начиная от налогообложения. ну и не такая уж экзотика - логистика, и снова оптимизация ;)

    pps а если нейронные сети и/или бигдата - может требоваться база как выше школьной, так и уже очень серьезная
    Ответ написан
    4 комментария
  • Как изменить тип объекта внутри самого объекта?

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

    мне кажется что это возможно в двух, или хотя бы в одном случае (вот только нужны ли они вам?)
    - без проверки не уверен на 100%, но полагаю возможно, если кто из них наследник Class A : B или наоборотClass B : A эту версию как раз надо проверять
    - точно возможно, если object A

    pps еще запаска - dynamic A но риски гимора такие же /pps

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

    ps ваш вопрос скорее в разрезе одного из "вечных споров" что лучше? статическая? или динамическая? типизация?

    возможно, вашу задачу, можно элегантно решить на другом языке. но только при условии, что она не критична к производительности.. и да, еще условие - объем кода способен удержать в голове один автор, и длительное время понимать собственную логику (а ваш вопрос похож на вопрос новичка, без обид ;))
    Ответ написан
    2 комментария
  • Почему Windows Forms берет ошибки из неоткуда?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    с 22 ток начинаю.. но вообще то вам все подсказывают
    2JZLpDu.png
    Ответ написан
    Комментировать
  • Почему Visual Studio не видит using?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    авто сгенерированный шаблон - 1 строка кода, над ней камент (кликабельно)
    8yY3JG0.png


    а в студии 2019 все было традиционно, что означает у вас либо текст битый, либо пути битые, либо в настройках чего перемудрили
    Ответ написан
    Комментировать
  • Как в одной строчке уместить вычисление и надпись?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    еще вариант, более консервативный, будет работать даже в древних версиях шарпа:
    Console.Write(pi * (Math.Pow(x, 2)));
    Console.WriteLine(" Площадь вашего круга!");
    Ответ написан
  • Как создать объект из строки параметров?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    пример для конкретной программы работающей с папками и дисками (кликнуть на спойлер)
    reg файлик добавления
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\Directory\shell\Scan_Content]
    @="Show Usage with Scanner"
    "Icon"="c:\\bin\\scn2\\Scanner.exe"
    
    [HKEY_CLASSES_ROOT\Directory\shell\Scan_Content\command]
    @="c:\\bin\\scn2\\Scanner.exe \"%1\""
    
    [HKEY_CLASSES_ROOT\Drive\shell\Scan_Content]
    @="Show Usage with Scanner"
    "Icon"="c:\\bin\\scn2\\Scanner.exe"
    
    [HKEY_CLASSES_ROOT\Drive\shell\Scan_Content\command]
    @="c:\\bin\\scn2\\Scanner.exe \"%1\""
    reg файлик удаления
    Windows Registry Editor Version 5.00
    
    [-HKEY_CLASSES_ROOT\Directory\shell\Scan_Content]
    
    [-HKEY_CLASSES_ROOT\Directory\shell\Scan_Content\command]
    
    
    [-HKEY_CLASSES_ROOT\Drive\shell\Scan_Content]
    
    [-HKEY_CLASSES_ROOT\Drive\shell\Scan_Content\command]
    с контекстным меню для файлов будет посложнее, есть готовые решения типа Open with++
    либо курить тему контекстного меню проводника проводника (тыц) до полного просветления
    Ответ написан
    Комментировать