Ответы пользователя по тегу C#
  • Как пофиксить ошибку сериализации в XML?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Попробуй в классе ScenarioManeger Chapter[] заменить на List<Chapter>.
    Скорее всего, при десериализации XML хочет добавить в массив новый элемент, но массив динамически не изменяется, поэтому и возникает ошибка
    Ответ написан
    9 комментариев
  • Почему не находит файл C# в csc?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Проверь, что директория откуда запускаешь - та же самая, что и та, которая этот .cs файл хранит.
    На всякий случай, выполни cd /file/path, где /file/path - полный путь до директории с этим файлом.

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

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Согласно туториалу, таймеры лучше делать через отдельные объекты, а не методы-корутины.
    Ответ написан
    Комментировать
  • Unity не считывает курсор мыши. Что делать?

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

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Объекты этой структуры будут в неуправляемой памяти, То есть зафиксированы.

    Неуправляемые объекты не подвергаются процессу сбора мусора - они вообще не проверяются.
    Вот и происходит следующее:
    1. Имеется массив объектов неуправляемой памяти
    2. В каждом объекте имеется ссылка на объект управляемой памяти
    3. GC запускается и т.к. неуправляемые объекты не проверяются, то объекты на которые ссылаются неправляемые исчезают, т.к. ссылок на них, возможно, больше не осталось.

    Попробуй:
    - Вызвать GC.KeepAlive на ссылках управляемой памяти (кол-беках)
    var funces = new Fun[];
    // Код
    GC.KeepAlive(funces);

    - Либо сохраняй массив объектов управляемой памяти вместе с целевым массивом, чтобы переменная с этим массивом хранилась в этом же методе и на нем вызови GC.KeepAlive (иначе область видимости ограничивается методом, в котором они создались). Примерно так:
    var (arr, managedObjects) = Create(funces);
    // Код
    GC.KeepAlive(managedObjects);

    - Либо, попробуй перед началом работы метода запрещать сборку мусора - GC.TryStartNoGCRegion/GC.EndNoGCRegion

    Самое что непонятное. хоть вопрос на что где когда отправляй, почему то ломается то нет.

    Во-первых, работа GC не детерминирована - он может запуститься в любой момент.
    Во-вторых, DEBUG или RELEASE режимы компиляции добавляют различные оптимизации и т.д. в процесс работы.
    В-третьих, при подключенном дебагере все локальные переменные не будут собраны GC, т.к. на них неявно появляются указатели.
    Ответ написан
  • Есть ли курсы/книги по автотестированию Selenium + C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ответ написан
    Комментировать
  • Что за таблица теневых страниц? Как их выделить, какая функция?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Какой функций можно выделить теневые страницы. или страницы физической памяти.
    Как вообще можно выделить физическую память, это невозможно же, или что есть какой-то особый malloc new?

    Никакой.
    Каждый процесс имеет свое ВИРТУАЛЬНОЕ адресное пространство. Доступ к физической памяти ведется через него путем хранения таблицы страниц и отображения на физическое адресное пространство.
    Этим всем занимается ОС и не только для удобства, но для безопасности.
    Какие функции для работы с гипервизором?

    Разве что в случае паравиртуализации
    Ответ написан
    Комментировать
  • Как сохранить сбоку AssemblyBuilder? Где методы Save, DefineDynamicAssembly?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Дока, которую ты отправил, относится к .NET Framework.
    После перехода на .NET Core и .NET Standard эту тему перестали поддерживать.
    Работы по этому поводу сейчас ведутся и в .NET 9 должно появиться: https://github.com/dotnet/runtime/issues/92975
    Но если хочешь прямо сейчас, то вот репа с примером, как можно своими силами это сделать: https://github.com/dotnet/runtimelab/blob/feature/...
    Ответ написан
    Комментировать
  • Как benchmarkdotnet передает аргументы?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Разве для каждого метода, каждой итерации не новый объект приходит?

    Судя по исходному коду (https://github.com/dotnet/BenchmarkDotNet/blob/109...), аргументы создаются во время создания объекта бенчмарка.

    Если тебе нужно на каждую итерацию создавать новый объект и работать с ним, то для этого используются Setup/Teardown методы. Их помечать через [IterationSetup]/[IterationCleanup] атрибуты надо.
    Примерно так:
    public class SampleBenchmark
    {
        private object _object;
    
        [IterationSetup]
        public void MySetup()
        {
            _object = CreateData(1000);
        }
    
        [IterationCleanup]
        public void MyCleanUp()
        {
            _object = null;
        }
        
        [Benchmark]
        public void Benchmark()
        {
            _object.DoSomething();
        }
    }


    как вообще можно узнать что пришло, если какой-то гений придумал что в Debug не работает Benchmark, гений

    BenchmarkDotNet использутся для замера производительности. В него помещается изначально правильно работающий код, производительность которого нужно замерить для будующих запусков в проде. В дебаг режиме есть много лишнего, неоптимизированного кода, поэтому производительность будет ниже и, чтобы таких ситуаций не было сделали такое ограничение.
    Если тебе нужно дебажить - то это юнит (xUnit, NUint, MSTest) и другие виды тестирования
    Ответ написан
    Комментировать
  • Как понять для чего использовать различные инструменты в программировании?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Не существует правильного варианта использования какого-либо инструмента - он просто имеет определенный функционал, а как его использовать - это уже на твоей совести и воображении.

    Например, ref и struct можно объединить для реализации посетителя, который модифицирует посещаемого объекта и т.к. структура на стеке хранится (неправильно так говорить, но тут сойдет), то можно объект сделать struct а после передавать через ref - боксинга не будет. Так, например, реализован JSON десериализатор в System.Text.Json - нигде не пишут что так можно делать, просто нашли способ.

    Или можно сделать 2 конструктора - один private без аргументов, а другой public с аргументами и тогда можно использовать EF Core, чтобы этот класс использовать и как объект в БД и как объект бизнес-логики. EF Core сам объект создаст и нужные поля выставит.

    Таких вариантов - куча. Как найти их - опыт. Уже сам описал как его получить - пиши свои проекты, изучай проекты других, читай умные книжки/статьи.
    Ответ написан
    1 комментарий
  • Почему required проперти не могут иметь более ограничиващий модификатор set\init, чем модиикатор класса, их содержащего?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Представь ситуацию, что кто-то во внешней сборке создает твой класс и ему обязательно нужно будет инициализировать это поле - он не сможет, т.к. internal set. А сделать это просто - рефлексия:
    SomeClass obj = (SomeClass) typeof(SomeClass).GetConstructor(
                      BindingFlags.NonPublic | BindingFlags.Instance,
                      null, Type.EmptyTypes, null).Invoke(null);

    И все!

    Тут несколько решений:
    1. Объяви класс как internal
    2. Выдели интерфейс с публичным get без set
    3. Для хранения используй поле и доступ к нему через свойство (но тут уже и required не особо нужен)
    Ответ написан
    3 комментария
  • Почему он жалуется на то что не может работать с null именно на строчке if (reader.GetString(14) != null)?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    На null надо проверять через IsDBNull - https://learn.microsoft.com/ru-RU/dotnet/api/syste...

    Переделай примерно так:
    if (!reader.IsDBNull(14))
         ad = reader.GetString(14);
    Ответ написан
    1 комментарий
  • Можно ли в c++ помечать код метками?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Если это нативный C++ - нет. В нем нет такого синтаксиса.
    Если это CLI/C++ (яп для .net), то да
    Ответ написан
    7 комментариев
  • Как лучше сохранять результаты логирования приложения NET?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1. Про NLog давно не слышал - больше про Serilog (стильно, модно, молодежно)
    2. Если это системное какое-нибудь приложение, то лучше используй системный журнал, либо пиши в файл отдельный
    3. Если есть внешний сервер логов (ELK стек, Graylog и т.д.), то отправляй туда (посмотри в сторону агрегаторов логов, )
    4. Если это контейнерное (докер, например) приложение, то логируй в stdout/stderr, а потом собирай логи у самого контейнера. Также, докер можно настроить на формат хранения логов и место хранения (можно локально хранить, а можно и отправлять по сети)

    P.S. фреймворк по большей части не важен, но рекомендую связку Microsoft.Extensions.Logging + Serilog:
    - Первый - предоставляет интерфейс для логирования
    - Второй - бэкэнд логирования
    Ответ написан
    8 комментариев
  • Как загнать в dictionary key как null?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Напиши обертку
    var dict = new Dictionary<MyNullableInt, string>();
    dict[null] = "hello, world!";
    
    Console.WriteLine(dict[null]); // Output: hello, world!
    
    
    struct MyNullableInt: IEquatable<MyNullableInt>, IEquatable<int?>
    {
        public int? Value { get; set; }
        public bool Equals(MyNullableInt other)
        {
            return other.Value == Value;
        }
    
        public bool Equals(int? other)
        {
            return other == Value;
        }
    
        public static implicit operator MyNullableInt(int? value)
        {
            return new MyNullableInt() {Value = value};
        }
    
        public static implicit operator int?(MyNullableInt value)
        {
            return value.Value;
        }
        
        public override bool Equals(object? obj)
        {
            if (obj is int value)
            {
                return value == Value;
            }
    
            if (obj is MyNullableInt mni)
            {
                return mni.Value == Value;
            }
    
            return false;
        }
    
        public override int GetHashCode()
        {
            return Value.GetHashCode();
        }
    }
    Ответ написан
    3 комментария
  • Как исправить ошибку 403 при попытке доступа?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    403 ошибка означает ошибку авторизации.
    Короче говоря, нужно залогиниться и все пройдет. Как происходит логин в этом API это уже другой вопрос (имя/пароль, токен доступа и т.д.)
    Ответ написан
    Комментировать
  • Как решить проблему с типами данных?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    HealthBarImage.fillAmount = (float) HealthBossNow / HealthBoss;
    Ответ написан
  • Как быстро освоить c#, если я работаю на c++?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Пролистываешь метанит параллельно повторяешь примеры.
    Это за 1-2 дня можно сделать.
    Синтаксис довольно простой и немного похож на C++, поэтому изучится легко. Дальше уже идешь в проект и изучаешь какие библиотеки/фичи платформы там используются - их много поэтому лучше не распыляться на них во время обучения
    Ответ написан
    Комментировать
  • Как правильно реализовать взаимодействия с сервером авторизации на стороне c#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    В OAuth используюся jwt токены преимущественно - про то чтобы передавать в куках не слышал/не реализовывал.
    Так как используется OAuth 2.0 , то все зависит от роли бэка на шарпе:
    - Если это просто API без вьюшек (HTTP), то тут лучше пользователя заставить самому предоставлять JWT и валидировать его на своей стороне
    - Если это веб-приложение, то нужно использовать Authorization Code flow

    В обоих случаях, когда токен протухнет тебе передаст сервер с успешным ответов в поле expires_in.
    Вот тут про OAuth flow - https://kinde.com/guides/authentication/protocols/...
    А вот тут что поддерживает Spring Boot OAuth - https://docs.spring.io/spring-security-oauth2-boot...
    Ответ написан
    Комментировать
  • Как реализовать функцию статистики просмотра страницы за некий период?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Тут подходит какая-нибудь аналитическая СУБД. Например, ClickHouse практически для этого и создавался (Click Stream + Ware House).
    Хранить можно следующим образом:
    1. Есть общая таблица по посещениям/визитами с примерно такой структурой [page_id, visit_date] (больше и не надо)
    2. Для хранения статистики создаешь материализованные представления для дня/недели/года

    У них есть тестовые данные для плейграунда сбора аналитики по посещениям/хитам - https://clickhouse-docs.vercel.app/docs/en/getting...
    Ответ написан
    3 комментария