Задать вопрос
Ответы пользователя по тегу C#
  • Как переменную string преобразовать в List в C#?

    var str = "a b c";
    var list = str.Split(' ').ToList();

    А вот почему юнити зависает - надо смотреть на код целиком.
    То что написано в вопросе не является валидным C#-кодом в принципе.
    Ответ написан
    Комментировать
  • Что делать если Visual Studio не поддерживает виндовс 8.1?

    Раз для C#, то посмотри в сторону Rider или VS Code.
    Ну или подумай над вариантом перейти на win 10 / 11
    Ну или торренты
    Ответ написан
  • Почему тип не может преобразоваться в родительский?

    Покажи код, который вызывает ошибку.
    В ошибке написано, что кастануть можно, но только явно.
    Ответ написан
  • Почему рекомендуется использовать private а не просто ставить везде Public?

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

    Вот пример из комментариев о том, как делать не стоит:
    class Character {
      public double health;
      public void TakeDamage(double damage) {
        if(damage <= 0) return;
        this.health -= damage;
        if(this.health <= 0) {
           this.Die();
        }
        // ...
      }
      public void Die() {
        this.DoSomethingSpecial();
        // ...
      }
      
      // Этот метод в будущем будет удалён, оставлен пока как костыль
      public void DoSomethingSpecial() {/*...*/}
    }


    Потом спустя хз сколько времени ты вернулся к коду.
    Как ты будешь вспоминать, как правильно стоит наносить урон персонажам?
    Через TakeDamage или в каких-то случаях можно напрямую изменить поле health?
    Если в каких-то случаях нужно напрямую использовать поле health, то в каких?
    Если ошибёшься - возникнут закономерные баги.

    Про скрытие деталей реализации:
    Допустим, что ты решил добавить в игру поддержку модов.
    Как разработчик мода поймёт, какие методы на персонажах можно вызывать не беспокоясь о том, что мод сломается в следующей версии игры?
    Например без использования модификатора internal - разработчик мода может подумать, что этот метод можно вызывать, а по факту - в следующей версии ты, как разработчик игры, планируешь его удалить или изменить сигнатуру, что поломает мод.
    + если у тебя многие вещи сделаны через поля, то тогда ты не сможешь использовать интерфейсы (ну или их использование будет затруднено)
    Ответ написан
    Комментировать
  • Есть ли такая архитектура?

    то уже нет смысла ни в UnitOfWork, ни в Repository. То есть можно избавиться от Infrastructure слоя, чтобы схема была уже такая: UI, Application, Domain.

    Infrastructure слой нужен не для того чтобы заменять базу в будущем, а чтобы работа с базой не захламляла домен.
    Да и "никогда переходить не планируется" - это достаточно громкое заявление.

    Просто в случае с UnitOfWork и Repository накладывают только лишнюю нагрузку, потому что это и так реализовано в EntityFramework.

    Тогда будет усложнено тестирование, так как ты не сможешь замокать EF.
    Лучше всю работу по построению запроса тоже вынести куда-то в инфраструктурный слой - тогда и UoW и "Repository" не придётся тащить в домен.
    Ответ написан
    Комментировать
  • Насколько Kestrel актуален для self-hosted web-сервера?

    Кестрел то актуален. Не актуальны сейчас пакеты с 2.2 и ранее.
    Сейчас всё что связано с aspnetcore идёт сразу вместе с sdk, а не как раньше (всё ещё выглядит как очень странное решение со стороны мс)

    И он используется по-умолчанию и так.
    https://learn.microsoft.com/ru-ru/aspnet/core/fund...
    Ответ написан
    3 комментария
  • Как удалить сессию из БД после истечения срока?

    1. Можно сессии хранить в чём-то типа редиса - там можно задавать ttl
    2. При хранении в обычной реляционке - можно на всякие события аутентификации, когда ты читаешь таблицу сессий - смотреть на ttl и удалять просроченные.
    3. Сверху ещё добавляем какую-нибудь задачу в cron, которая будет раз в сутки чистить.

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

    Не обязательно удалять сессию сразу после её истечения - всё равно же при запросах проверяешь время действия.
    Ответ написан
    Комментировать
  • Как обезопасить программу С# от взлома?

    Вообще раз уже допускается наличие сетевого соединения между клиентом и сервером, то напрашивается просто вынести все критические функции на сервер.

    Но я просто пытаюсь угадать что и от чего ты пытаешься защитить.
    Ответ написан
    Комментировать
  • Где принято хранить переменные окружения в ASP.NET Core?

    Переменные окружения всегда хранятся в переменных окружения.

    .env-файл - это не переменные окружения, а конфиг, который потом должна подхватить программа и добавить данные из него в свои переменные окружения.
    В .NET есть пакет, который делает ровно это: https://www.nuget.org/packages/dotenv.net

    В .net для конфигов принято использовать классы и интерфейсы из Microsoft.Extensions.Configuration.
    Самый распространённый вариант конфига - файл appsettings.json.

    Если мне память не изменяет, то m.e.c по-умолчанию в asp net core настроен так, чтобы тащить конфиги из appsettings, переменных окружения, и аргументов командной строки.

    Отдельно можно ещё сделать интеграцию и с другими вариантами конфигурации при помощи "Configuration providers".

    Подробнее можно почитать в документации: https://learn.microsoft.com/en-us/aspnet/core/fund...
    Ответ написан
    2 комментария
  • Как разумно поставить себе начало в программировании (C++ и C#)?

    1. C++ - это не единственный способ хорошо понять, как работает компьютер. Раз уж это первый язык, то я бы смотрел сразу в сторону Rust, тк он также сразу учит тебя тому, как можно управлять памятью.

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

    3. Просто открываешь книгу или курс и читаешь, делаешь всё более и сложные проекты. Всё.
    Выбирая литературу - смотри на автора и отзывы.

    4. Если хочешь начать карьеру с C++, то тут мастхев будет диплом какого-нибудь хорошего вуза, чтобы тебя рассматривали всерьёз. (тоесть закладывай ещё +3 года после окончания колледжа).
    Хотя опять же - начинать карьеру с C++ сейчас - это крайней сомнительный выбор, если не геймдев, конечно.
    Для джуна в принципе разницы нет - на любом стеке тебе будет крайне тяжело найти первую работу.
    Для опытного аналогично, но наоборот - на любом стеке, если он не совсем мёртвый, найти работу будет вполне реально. (в худшем случае пара месяцев на поиск наиболее вкусного предложения).
    Сам в вполне успешно получал оффер на такую экзотику, как F#, а сейчас вообще пишу на Rust.
    Ответ написан
    5 комментариев
  • Что такое сборка?

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

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

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

    стим умеет принимать логин и пароль через аргументы командной строки.
    steam.exe -login username password

    Однако, если тебе нужна какая-то автоматизация ради, например, продажи услуги смены региона (или чего-то ещё подобного), то логичнее выглядит аутентификация в браузере, а не в приложении.

    Ну и так как стим сделан на Qt и ещё обмазан повсюду html-ем, то System.Windows.Automation нормально работать не будет, так как просто не увидит никаких элементов управления.
    (Я бы попробовал через нажатия на tab переключаться между элементами)
    Ответ написан
  • Как правильно тестировать базу данных в .NET?

    Вся логика выборок, фильтров и т.д. вынесена на уровень Storage Procedure, значит не получится создать тестовую БД с тестовыми данными.

    Это ещё почему? Во время прогона тестов поднимаете полноценную СУБД, которую заполняете всеми табличками и процедурами.
    Больше вариантов нет, если хочется этот слой протестировать.
    При наличии миграций - это не должно быть сильно сложно.

    В крайнем случае можно взять дамп продовой базы, вычистив все чувствительные данные.
    Ответ написан
    2 комментария
  • Что означает оператор => в linq c#?

    Это не оператор, а стрелочка, которая отделяет аргументы анонимной функции от её тела.
    https://learn.microsoft.com/en-us/dotnet/csharp/la...

    Тоесть вот такой код создаёт функцию с единственным аргументом num, которая возвращает значение выражения num != 2.
    num=>num!=2

    Ведь эта строка на много проще

    Нет, не проще.

    Выбирай:
    var noTwo = nums.Where(x=>x != 2);
    // или
    var noTwo=from num in nums
                      where num!=2
                      select num;
    Ответ написан
    Комментировать
  • Как понять что я выучил основы C#?

    CLR via C# открывай и иди по порядку, если хочешь глубже знать.
    Если прям минимальный минимум, то:
    1. Все стандартные управляющие конструкции: условия, циклы, итд.
    2. Типы: примитивные, ссылочные, значимые. Работа со строками.
    3. ООП: интерфейсы, наследование. Отличия между прямым и виртуальным вызовом
    4. BCL
    5. Linq: query синтаксис и через методы-расширения. Linq to IEnumerable, Linq to IQueryable и различия. Лямбды, делегаты, замыкания.
    6. Потоки, таски, async/await. Понимание различий между асинхронностью и многопоточностью. Синхронизация потоков.
    7. Всякие кишки: IL, рефлексия, emit, как работает JIT, как работает сборщик мусора.

    В принципе этого достаточно для уверенного использования
    Ответ написан
    6 комментариев
  • Почему не работают миграции при переходе на новый csproj формат?

    Вместо того чтобы использовать гайды, которые вышли 7 лет назад - попробуй Upgrade Assistant - он должен автоматически всё обновить
    https://learn.microsoft.com/en-us/dotnet/core/port...
    Ответ написан
    Комментировать
  • Как правильно сделать запрос gPRC Tinkoff.InvestApi методу GetTechAnalysis?

    Вроде же чёрным по белому написно:

    Conversion from DateTime to Timestamp requires the DateTime kind to be Utc (Parameter 'dateTime')


    Timestamp.FromDateTime(DateTime.Now)
    Вот тут надо UtcNow

    Timestamp.FromDateTimeOffset(new DateTime(2023,12,31)),

    и вот тут явно указать kind
    Ответ написан
  • Как сделать таймер?

    Комментировать
  • Как правильно сформировать запрос Тинькофф API gRPC?

    1. Примеры есть, если напишешь issue, то пример новый добавят рано или поздно.
    Для инструментов пример вот:
    https://github.com/RussianInvestments/invest-api-c...

    2. А что именно тебе нужно?
    Вот например:
    var settings = new Tinkoff.InvestApi.InvestApiSettings
    {
        AccessToken = "..."
    };
    var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings);
    var currencies = client.Instruments.Currencies();
    foreach (var currency in currencies.Instruments)
    {
        Console.WriteLine(
            $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}");
    }


    PS: https://github.com/RussianInvestments/invest-api-c...
    Ответ написан
    1 комментарий
  • Не работает Visual Studio, начинающий изучатель C#?

    1. Работает.
    2. Все ошибки перечислены внизу.
    Ошибка у тебя в том что ты методы пишешь в неймспейсе, а не в классе - смотри внимательно, как код пишет ведущий.
    Ответ написан
    5 комментариев