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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Стоит ли разделить

    Нагрузка и сложность поддержки высоки для этого монолита или микросервиса? Эти издержки сильно упадут после распиливания? Это ответ на Ваш вопрос.
    Ответ написан
    Комментировать
  • Как правильно перебирать IWebElement SELENIUM C#?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    Относительные пути XPath?
    By.XPath(".//div/div[1]/div[1]/div/span")
    Ответ написан
    2 комментария
  • Как сделать команду которая при вводе определенного слова закрывает консоль на C#?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Clear();
                double firstVal, secondVal = 0;
                string act;
    
                try
                {
                    Console.WriteLine("Введите 1-е число: ");
                    firstVal = double.Parse(Console.ReadLine());
    
                    Console.WriteLine("Выберите операцию: '+' '-' '*' '/' 'x^' '√x'");
                    act = Console.ReadLine();
    
                    if (act == "exit")
                    {
                        Environment.Exit(0);
                    }
    
                    if (act == "√x")
                    {
                        Console.WriteLine(Math.Sqrt(firstVal));
                    }
                    else
                    {
                        Console.WriteLine("Введите 2-е число: ");
                        secondVal = double.Parse(Console.ReadLine());
                    }
                }
                catch (Exception)
                {
                    Console.WriteLine("Введены недопустимые символы");
                    Console.ReadLine();
                    continue;
                }
    
                switch (act)
                {
                    case "+":
                        Console.WriteLine(firstVal + secondVal);
                        break;
    
                    case "-":
                        Console.WriteLine(firstVal - secondVal);
                        break;
    
                    case "*":
                        Console.WriteLine(firstVal * secondVal);
                        break;
                        
                    case "x^":
                        Console.WriteLine(Math.Pow(firstVal, secondVal));
                        break;
                        
                    case "/":
                        if (secondVal == 0)
                            Console.WriteLine("Деление на ноль невозможно");
                        else
                            Console.WriteLine(firstVal / secondVal);
                        break;
    
                    default:
                        if (act != "√x") // проверка на допустимую операцию
                            Console.WriteLine("Ошибка! Неправильная операция.");
                        break;
                }
    
                Console.ReadLine();
                Console.WriteLine("Введите 'exit' для выхода или нажмите Enter для продолжения.");
                string? input = Console.ReadLine();
                if (input == "exit")
                {
                    Environment.Exit(0);
                }
            }
        }
    }
    
    // Введите 1-е число:
    // 5
    // Выберите операцию: '+' '-' '*' '/' 'x^' '√x'
    // /
    // Введите 2-е число:
    // 0
    // Деление на ноль невозможно
    // 
    // Введите 'exit' для выхода или нажмите Enter для продолжения.
    // exit
    // 
    
    // Введите 1-е число:
    // 5
    // Выберите операцию: '+' '-' '*' '/' 'x^' '√x'
    // -
    // Введите 2-е число:
    // 3
    // 2
    // 
    // Введите 'exit' для выхода или нажмите Enter для продолжения.
    // exit
    Ответ написан
  • Как сделать свой эквалайзер звука на c# с помощью библиотеки NAudio?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Или хотя бы гайды по библиотеке NAudio.

    Чем официальный репозиторий не понравился?
    Ответ написан
    Комментировать
  • Не хочет работать Lerp?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    // gameObject.transform.position.Lerp(gameObject.transform.position, _pointTargetUIForAnim.transform.position, _animSpeed * Time.deltaTime);
    gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, _pointTargetUIForAnim.transform.position, _animSpeed * Time.deltaTime);
    Ответ написан
    Комментировать
  • Как правильно организовать выполнение программы по времени?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    На данный момент рассматриваю только вариант
    Thread.Sleep

    Thread.Sleep блокирует текущий поток, что может быть неэффективным и привести к проблемам, если поток должен выполнять другие задачи.
    Подскажите пожалуйста как запускать программу каждые 15 мин. в цикле?

    Цикл обязательно? Может Cron? Либо PeriodicTimer с методом WaitForNextTickAsync, который ожидает следующий тик таймера и возвращает true, если тик произошел, и false, если таймер был отменен.
    Ответ написан
    Комментировать
  • Десериализовать массив JSON?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Насколько я помню, для десериализации массива строк json в List не требуется передавать отдельный класс DeserializationJson, можно использовать сразу JsonSerializer.Deserialize<List<string>>, попробуйте так:
    using System.Text.Json;
    
    namespace ReflTest;
    
    internal class DesJson
    {
        public IEnumerable<string> RunDesir(string jsonString)
        {
            var result = JsonSerializer.Deserialize<List<string>>(jsonString) ?? Enumerable.Empty<string>();
            return result.Select(item => item.ToString());
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            string jsonString = "[\"1\",\"2\",\"3\",\"4\",\"5\"]";
            DesJson desJson = new DesJson();
            IEnumerable<string> result = desJson.RunDesir(jsonString);
            result.ToList().ForEach(Console.WriteLine);
        }
    }
    Ответ написан
    Комментировать
  • Возможно ли в массиве найти определенное значение и его индекс?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    волшебная функция

    Можно родить примерно такое:
    // The magic function.
    static (int Index, int Value) MagicFunction(int[] array, int target)
    {
        int index = Array.IndexOf(array, target);
        return index != -1 ? (index, array[index]) : (-1, -1);
    }
    
    // Используем.
    
    int[] numbers = {2, 4, 6, 8, 10};
    int t = 6;
    
    (int i, int v) = MagicFunction(numbers, t);
    
    Console.WriteLine(i != -1 ? $"Элемент {v} найден по индексу {i}." : $"Элемент {t} не найден в массиве.");
    // Элемент 6 найден по индексу 2.
    Ответ написан
    Комментировать
  • Не работает цикл for (Даже не запускается от функции)?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Условие цикла for написано не верно:
    // for(int i = 0; i >= _inventory.Length; i++)
    for(int i = 0; i < _inventory.Length; i++)
    
    // Или если _inventory изначально может быть пуст, а значит и перебирать там нечего.
    for(int i = 0; i <= _inventory.Length; i++)
    Ответ написан
    Комментировать
  • Можно ли преобразовать без копирования byte[,] в byte[]? Как избавится от пробелммы, что одной мат. библиотеке нужен [,], другой[] с width height?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант, использовать легковесный срез массива без копирования (Span<T>):
    byte[,] data2D = ...; 
    int width = data2D.GetLength(1);
    
    // Создаем Span byte из data2D.
    Span<byte> data1D = MemoryMarshal.CreateSpan(ref data2D[0, 0], data2D.Length); 
    
    // Передаем Span byte в функцию.
    ProcessData(data1D, width);
    Ответ написан
    2 комментария
  • Что делать если в юнити c# выводит сообщение в консоль если она больше 5 хотя не должна?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Обратите внимание на ; после блока с условием if (hw <= 6), это означает, что блок кода, который идет дальше (в фигурных скобках), будет выполнен независимо от результата этого условия:
    // false
    if (1 > 2);
    
    // Но код все равно будет выполнен:
    {
        print("Welcome!");
    }

    Попробуйте так:
    if (hw <= 6)
    {
        print("Welcome!"); 
    }
    
    // Или так
    if (hw <= 6) print("Welcome!");
    Ответ написан
    1 комментарий
  • Как сделать, чтобы браузер, открытый при помощи Selenium работал как с мобильного телефона?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    Как сделать, чтобы браузер, открытый при помощи Selenium работал как с мобильного телефона?

    У одного веб приложения есть проверка на текущее устройство.

    Никак, пока не будет известен алгоритм детекта НЕ мобильного устройства. Но, как вариант, использовать один из следующих методов (от простого к сложному):
    1. Открыть инструменты разработчика браузера, активировать "toggle device toolbar" и задать ширину и высоту дисплея, равную мобильному устройству (условно чекается).
    2. Использовать Appium + Android Virtual Device (слабо чекается).
    3. Использовать Appium + настоящий смартфон (слабо чекается).
    4. Использовать собственный браузер (не чекается).

    P.S. про всякие заголовки, ip, куки, локальные хранилища, частота подключений итп даже говорить не будут, это дефолт.
    Ответ написан
    Комментировать
  • Как подключить бд к серверу в docker-compose?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Server=localhost

    Чей локалхост? У каждого контейнера он свой. Тогда какой указывать? Оптимально - по имени.
    https://docs.docker.com/compose/networking/
    Reference containers by name, not IP, whenever possible. Otherwise you’ll need to constantly update the IP address you use.

    Port=6002

    Чья туфля порт? Внутри докер-сети (Вы же указали: networks>postgres-network) контейнеры общаются по внутренним портам (рекомендуется).

    Если резюмировать, то будет примерно так (поправить местами при необходимости):

    "Postgres": "Server=localhost; Port=6002; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    "Postgres": "Server=postgres_db; Port=5432; Database=post; User ID=postgres; Password=passwd; Pooling=true"

    docker-compose.yml:
    version: '3.8'
    
    networks:
      postgres-network:
        driver: bridge
    
    services:
      gchain.posts.api:
        image: gchain.posts.api
        build:
          context: .
          dockerfile: GChain.Posts.Api/Dockerfile
        ports:
          - "80:8080"
        networks:
          - postgres-network
        depends_on:
          - postgres_db
    
      postgres_db:
        container_name: postgres_post
        image: postgres:latest
        environment:
          POSTGRES_USER: ${POSTGRES_USER:-postgres}
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-passwd}
          POSTGRES_DB: post
        volumes:
          - postgres-data:/var/lib/postgresql/data
        ports:
          - "6002:5432"
        networks:
          - postgres-network
        restart: unless-stopped
    
    volumes:
      postgres-data:
    Ответ написан
    Комментировать
  • Как выводить на консоль ключевые слова особым цветом, отличным от всего остального текста?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вы изменяете цвет консоли внутри делегата с уже сформированной строкой. Как вариант, можно разделить текст на слова и выводить нужные слова с нужным цветом:
    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            string text = "This is the great city of Sevsar, the harbor of humanity";
            string[] keywords = { "great", "harbor" };
    
            HighlightKeywords(text, keywords, ConsoleColor.Red);
            Console.WriteLine();
        }
    
        public static void HighlightKeywords(string text, string[] keywords, ConsoleColor highlightColor)
        {
            string pattern = $@"\b({string.Join("|", keywords)})\b";
            MatchCollection matches = Regex.Matches(text, pattern, RegexOptions.IgnoreCase);
    
            int lastIndex = 0;
            foreach (Match match in matches)
            {
                Console.Write(text.Substring(lastIndex, match.Index - lastIndex));
    
                Console.ForegroundColor = highlightColor;
                Console.Write(match.Value);
                Console.ResetColor();
    
                lastIndex = match.Index + match.Length;
            }
    
            Console.Write(text.Substring(lastIndex));
        }
    }

    КартинкО

    6641ffe274e9d095852691.png
    Ответ написан
    1 комментарий
  • Как правильно собрать wpf проект?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как правильно собрать проект таким образом чтобы у других пользователей не было доступа на исходный код.

    dotnet publish - компиляция проекта в промежуточный язык (IL) с расширением DLL. Относительно простой реверс.

    dotnet publish -r win-x64 -c Release - компиляция проекта в единый экзешник (машинный код) под win64. Относительно, не простой реверс.
    не говорю чтобы проект должен состоит из одного exe файла так как думаю это повлияет на оптимизацию самой приложении.

    Повлияет, в большинстве случаев - приложение становится более производительным.
    Ответ написан
    Комментировать
  • C# Как распаковать все содержимое конкретной папки в .zip архиве в папку на диске?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Часть кода из одного моего проекта, где решается похожа задача (поправить пути и логику при необходимости):
    using System.IO.Compression;
    
    string zipPath = @"path/zip.zip";
    string unZipPath = @"path/unzip-dir";
    string dirNameInZip = "dir-name";
    
    // Проверяем наличие архива
    if (!File.Exists(zipPath))
    {
        throw new FileNotFoundException("Ошибка, архив не найден.", zipPath);
    }
    
    // Создаем выходную директорию, если она не существует
    Directory.CreateDirectory(unZipPath);
    
    // Получаем архив
    using var archive = ZipFile.OpenRead(zipPath);
    
    // Ищем нужную директорию в архиве
    var folder = archive.Entries.FirstOrDefault((e) =>
        e.FullName.StartsWith(dirNameInZip + "/") && e.FullName.Length > dirNameInZip.Length + 1);
    
    if (folder == null)
    {
        throw new DirectoryNotFoundException($"Ошибка, директория '{dirNameInZip}' в архиве не найдена.");
    }
    
    // Извлекаем директорию со всеми данными
    foreach (var entry in archive.Entries.Where((e) => e.FullName.StartsWith(folder.FullName)))
    {
        string relativePath = entry.FullName[(folder.FullName.Length + 1)..];
        string filePath = Path.Combine(unZipPath, relativePath);
    
        // Создание вложенных директорий, если требуется
        string? directoryPath = Path.GetDirectoryName(filePath);
        if (!string.IsNullOrEmpty(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }
    
        // Извлечение файлов с перезаписью
        entry.ExtractToFile(filePath, overwrite: true);
    }
    Ответ написан
    5 комментариев
  • Почему получается подключить Core в Dockerfile?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу (использовать одну общую либу Core для нескольких проектов), то я бы использовал 2 варианта:
    - Создание NuGet пакета (если Core изменяется не часто), затем подключаем его в любом проекте.
    - Или docker multi-stage builds (если Core изменяется часто).

    Пример docker multi-stage builds с авто сборкой Core lib + Api proj (поправить пути и наименования директорий при необходимости):
    # Build Core lib
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS core-build
    WORKDIR /src
    COPY ["../Core/Core.csproj", "./Core/"]
    RUN dotnet restore "./Core/Core.csproj"
    COPY ["../Core/", "./Core/"]
    RUN dotnet build "./Core/Core.csproj" -c Release -o /app/core
    
    # Build API proj
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS api-build
    WORKDIR /src
    COPY ["Service/API/API.csproj", "./Service/API/"]
    RUN dotnet restore "./Service/API/API.csproj"
    COPY ["Service/API/", "./Service/API/"]
    COPY --from=core-build /app/core /lib
    RUN dotnet build "./Service/API/API.csproj" -c Release -o /app/service
    
    # Create final image
    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    WORKDIR /app
    COPY --from=api-build /app/service .
    ENTRYPOINT ["dotnet", "API.dll"]
    Ответ написан
    1 комментарий
  • Selenium, как найти элемент (поискового запроса)?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    У них поиск реализован во фрейме, соответственно необходимо переключиться на этот фрейм и уже затем взаимодействовать внутри него с элементами.

    На python это будет выглядеть примерно так:
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    
    try:
        driver.get('https://dzen.ru/')
    
        iframe = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "iframe.dzen-search-arrow-common__frame"))
        )
    
        driver.switch_to.frame(iframe)
    
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "input.arrow__input.mini-suggest__input"))
        )
    
        print(element)  # <selenium.webdriver.remote.webelement.WebElement (session="5e3642980c7d8fcb1b687f3c9a716998", element="f.15CF8DCC914EA871801192FF570A26AF.d.A418C847E39359367688E91E0850A734.e.5")>
    
        element.send_keys("Найдено!")
    
        time.sleep(20)
    
    finally:
        driver.quit()


    660eae28c59d0142362756.png
    Ответ написан
    2 комментария
  • Как добавить график на страницу Razor?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Если не сложно, добавьте пример самого графика. Как добавить туда значения - я как-нибудь доковыляю сам.

    Пример из библиотеки Plotly.Blazor https://github.com/LayTec-AG/Plotly.Blazor#usage
    Ответ написан
    Комментировать