Задать вопрос
  • Как вытащить из одной формы в другую значение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Как создавать потокобезопасные вызовы к элементам управления Windows Forms: https://learn.microsoft.com/ru-ru/dotnet/desktop/w...
    void FormAMethod()
    {
        if (formB.InvokeRequired)
        {
            formB.Invoke( () => formB.Text = "data" );
        } 
        else
        {
           formB.Text = "data";
        }
    }
    Ответ написан
    Комментировать
  • Какие есть способы компиляции проекта WinForms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Только стандартный компилятор МС. Ибо WinForms - это по сути обёртка над древним легаси кодом и попытка сделать удобный визуальный конструктор форм и которая сама по-себе уже стала легаси. А, ну и в проектах WinForms всё равно приходится использовать костыли для тех или иных вещей. Вы думаете кто-то будет делать и поддерживать C# компилятор для дважды древнего легаси проекта МС? Даже если найдётся какой-то другой компилятор - с вероятностью 95-99% вообще любой проект WinForms придётся долго и мучительно пичкать костылями, чтобы оно просто хотя бы собралось. Да и потом еще надо будет заставить это всё не просто работать, а правильно работало. Даже искать решение нет смысла - вероятность проблем практически 100%.
    Ответ написан
    Комментировать
  • Как разобрать json на классы и переменные в c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Пишете нужный класс с нужными данными: Как правильно описать класс для библиотеки Newtonsoft.Json C#?
    2. Открываете ман Newtonsoft.json в разделе конвертеров: https://www.newtonsoft.com/json/help/html/CustomJs... и далее в гугле.
    3. Пишете свой конвертер
    4. Радуетесь результату
    Ответ написан
    1 комментарий
  • Как предотвратить изменение пользователем данных во время выполнения async метода сохранения этих данных?

    petermzg
    @petermzg
    Самый лучший программист
    Данные погут меняться только от действий пользователя. Так что включите режим read only пока идет сохранение и никто ничего поменять не сможет
    Ответ написан
    Комментировать
  • Как использовать имя свойства класса из переменной?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Перегрузка индексатора
    public class Foo : Dictionary<string, int>
    {
        public new int this[string key]
        {
            get => this.GetValueOrDefault(key);
            set => base[key] = value;
        }
    }

    Foo f = [];
    string k = "key";
    Console.WriteLine($"Value not set: {f[k]}");
    f[k]++;
    Console.WriteLine($"Value ++: {f[k]}");
    f[k]++;
    Console.WriteLine($"Value ++: {f[k]}");
    f[k]--;
    Console.WriteLine($"Value --: {f[k]}");

    Value not set: 0
    Value ++: 1
    Value ++: 2
    Value --: 1
    Ответ написан
    Комментировать
  • Чем отличается в с# например int a {get;} от int a {get; private set;}?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    int a { get; }
    Свойство только для чтения: можно записать только в конструкторе или инициализаторе, а в методах класса и других способах нельзя изменить.

    int a { get; private set; }
    Свойство только для чтения снаружи класса: можно записать только внутри класса - в конструкторе, методе и в остальных способах.
    Ответ написан
    Комментировать
  • Что такое сборка?

    Ну сборка - это то что в dll-файле, да.

    Где ты прочитал о статических и динамических я не знаю, по тому загуглил сам.

    Статическая сборка - это такая, сборка, которая сохранена как dll-файл.
    Динамическая - которая создана при помощи System.Reflection.Emit и существует только в рантайме.
    Ответ написан
    Комментировать
  • Как отобразить код формата dll в visual studio с китайского на английский?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак. Да, это все код и отображается он верно, но есть нюанс - это бинарный код, а если еще точнее, то машинный код, а именно - инструкции, которые выполняет процессор. И текстовый редактор, в котором вы открыли DLL не предназначен для отображения бинарных файлов. Текстовые редакторы для текста предназначены. И к китайскому языку он не имеет вообще никакого отношения. Учите матчасть!
    Интересующие вас игровые ресурсы могут быть запакованы кучей самых разных способов. Есть типовые решения, которые применяются часто и, которые, хорошо известны. Есть популярные игровые движки, которые тоже все давно исследованы и изучены где, что и как хранят. И есть все остальные - редкие, никому не нужные движки, самописные движки, переделанные движки, часто даже шифруют и придумывают свои форматы для хранения ресурсов для усложнения задачи обратной разработки, взлома и прочего. Извлечение игровых ресурсов из игры - это процесс обратной разработки. Вот в этом направлении вам и нужно гуглить и учиться, чтобы извлечь нужные вам ресурсы.
    Ответ написан
    Комментировать
  • Не работает цикл 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++)
    Ответ написан
    Комментировать
  • Между сборками и пространствами имён нет прямого соответствия. Что это значит?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ты можешь создать сборку (грубо говоря, проект/.csproj), которая называется Service.Domain, но все классы там будут в неймспейсе (пр-ве имен) Another.Namespace
    Т.е. название проекта не накладывает ограничений на названия пр-в имен, которые в нем хранятся.
    Ответ написан
    Комментировать
  • Как разделить UI и логику десктоп приложения C#?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать стандартные паттерны типа MVC и MVVM. Для большинства приложений этого достаточно. Если приложение более сложное, то оно делится на компоненты в виде, опять же, стандартных библиотек и приложения/приложений.
    Ответ написан
    Комментировать
  • Можно ли создавать дополнительные папки в папках Views и ViewModels в Avalonia или это является плохим тонном?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Можно. Разрешаю
    Ответ написан
    Комментировать
  • Как одновременно работать с одной папкой двум копиям приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В данном случае проще всего будет просто связать оба инстанса друг с другом и использовать второй инстас как резервный. Например через банальную проверку друг друга по сети запросом каким-нибудь. Один инстанс работает, а другой проверяет, что первый инстанс работает верно. Если первый инстанс не отвечает, висит, сломался и т.п. - в работу включается второй и где-нибудь ставит флаг/файл/что угодно и как, что теперь он основной, а первый - резервный будет, когда заработает и отправляет сообщение ответственному.

    Чуть более сложный вариант: использовать, например, редис для хранения состояния процесса работы и через него синхронизировать инстансы. Например: первый сервис определил для себя задачу и сообщает об этом второму, что он взял такую-то задачу или такие-то файлы. Соответственно второй сервис эти файлы не трогает. Или, оба инстанса смотрят в каталог, как только что-то обнаруживают - помещают в очередь задач. А при появлении задачи в очереди - оба сервер генерируют случайно число и так выбирают кто из них возьмет следующую задачу из очереди. Т.о. можно, этих инстансов наплодить сколько угодно.

    Более правильный вариант: разделить функционально вашу задачу на несколько более простых. А именно: вместо проверки каталога, запустить на том сервере, где находится данный каталог с файлами сервис наблюдения ФС, который использует системные уведомления об изменениях файловой системы. И при наступлении нужных событий - отправляет запрос в очередь на обработку, например в тот же редис, а оттуда запрос забирает один из инстансов и обрабатывает его.
    Ответ написан
  • Автоматическая генерация классов на основе других классов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для C# это можно сделать 2 путями (без учета ручного создания):
    - Source Generators
    - Генерация IL кода (динамическая сборка)

    Лично я за 1 вариант, т.к. он будет быстрее в рантайме (все уже скомпилировано).
    Ответ написан
    2 комментария
  • Почему C# не кроссплатформенный?


    Почему C# не кроссплатформенный?

    На этот вопрос нельзя ответить сразу по двум причинам:
    1. C# - это язык, а язык не может быть кросс-платформенным, так как платформы в разрезе языка и нет.
    2. .NET уже много лет как кросс-платформенный.
    Начиная с уже мейнстримного .NET 8, заканчивая mono и всякой экзотикой типа nano framework


    но при этом, это не так

    Ничто нельзя запустить на "чём угодно"


    но в неё вопрос кроссплатформенности решена абсолютно полностью

    Если вопрос "абсолютно полностью" решён, то почему я не могу запускать программы, написанные на Java, на любом железе?
    Ответ написан
    Комментировать
  • Почему VSCode не создаёт блок Main при создании нового консольного приложения на C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это называется Top Level Main - https://metanit.com/sharp/tutorial/1.4.php (начиная с C# 9)
    Кратко - нет смысла переделывать.
    Функциональность та же самая, разница только в том, что Main() генерируется компилятором, но преимущество - можно не заморачиваться над сигнатурой (например, можно влепить async/await и не менять void на async Task)
    Ответ написан
    Комментировать
  • Почему в C# через конструктор можно передать к базовому обьекту производный?

    Но это не верно с точки зрения логики,

    Почему не верно? Конкретный тип всегда можно привести к базовому.
    Джон не человек? Кошка не животное?
    Вот наоборот уже нельзя: например нельзя People ob = new object(); - будет ошибка, тк object - слишком абстрактный тип.

    PS: чтобы не мучать отвечающего - лучше делай нормальные отступы в коде.
    Ответ написан
    2 комментария
  • Как прервать поток c#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Раньше и всегда я делал, кучу говнокода, вставлял проверки на статус токена или булевой переменной.

    Да. Ты правильно делал. Это единственный дешевый пособ остановить поток не разрушив приложение.
    Единственное но. Если это численный метод и он вычисляет
    int[a][b][c][d]=Math.Pow(a*b*c*d,Math.Sqrt(Math.Sin(Math.Cos(Math.Sqrt(a-b/a)))))))*a+b;

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

    Практика показывает что частота 10-50 Гц является оптимальной для работы с пользователем.
    И нет смысла делать чаще. Ты все равно быстрее на кнопку не нажмешь.
    Ответ написан
    Комментировать
  • Как прервать поток c#?

    Это вообще правильно?

    Да, это правильно и это по сути единственный адекватный способ отмены долгоиграющих операций.
    Когда-то давно у потоков был метод Abort, но его удалили, тк его использование очень часто приводило к неприятным багам.
    Ну и пихать проверку cancellation token повсюду не обязательно.
    Поток вызывает 1 функцию библиотечную неуправляемого кода, как ее прервать?

    Безопасно - никак, если эта неуправляемая функция не предоставляет интерфейс для отмены.
    Даже если бы и был способ (тот же Abort), то прерывание неуправляемого кода очень вероятно приведёт к утечке ресурсов (в лучшем случае не будет освобождена динамическая память)
    Ответ написан
    Комментировать