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

    Шаблонный

    Шаблонный что?
    итератор

    А что ты итерировать собрался?

    Не нужно тут придумывать название паттерна и пытаться по нему решить задачу.
    Сама задача решается тупо рекурсивным проходом по всем подпапкам.
    В зависимости от того, как конкретно ты будешь это реализовывать, будут наблюдаться разные паттерны.
    Ответ написан
    Комментировать
  • Spring или Asp.net core для будущей работы?

    Зарплаты примерно и там и там если не одинаковые, то очень близкие.
    Вакансий на Java/Spring больше, чем на C#/ASP NET Core, но во втором случае и конкуренции меньше. В целом проблем с поиском работы нет.

    Я буду жабой, которая хвалит своё болото и предложу углубиться в ASP.NET Core.
    Мне C# кажется более перспективным языком и платформой чем Java. (хотя ещё я бы посмотрел на Kotlin)

    Но тебе всё равно следует посмотреть ситуацию на конкретно твоём рынке труда и принять окончательное решение.
    Учитывай, что ситуация за 3-4 года 10 раз может поменяться.
    Ответ написан
    2 комментария
  • Можно ли получить тип интерфейса, переданного в дженерик-метод и правильно ли использовать его таким способом?

    Ну ты можешь сделать так:
    switch(parameter) {
      case IPrintService_IncomeProductLabelParams incomeProductLabel: {
        // ...
        break;
      }
      case IPrintService_WLabelParams wLabel: {
        // ...
        break;
      }
      // итд
      default:
        // ...
      break;
    }

    Но мне не понятен смысл женерика и интерфейсов с пропертями.
    Ты собираешься делать параметры ещё и структурами?
    В принципе тут можно избавиться от интерфейсов вообще и оставить только конкретные классы, а в IPrintService сделать несколько перегрузок, например.
    Или сделать по интерфейсу для каждого типа этикеток.

    Вообще, я у тебя тут вижу три разные вещи у этикеток:
    1. Какой принтер используется (PrinterName)
    2. Параметры задания на печать (Copy)
    3. Параметры самой этикетки. Её тип и, например, SKU товара.
    Попробуй подумать с этой стороны.
    Например ты можешь сделать такой IPrinter, который будет принимать в себя PrintTask, у которого будет написано количество нужных копий и Payload который будет уже самой этикеткой.
    Конкретная реализация IPrinter может быть привязана к одному физическому принтеру.

    А Payload ты можешь формировать отдельно от сервиса печати. Например у тебя может быть какая-нибудь "служба шаблонов этикеток", в которую ты передаёшь объект с параметрами этикетки, а она отдаёт тебе уже сформированный объект этикетки, который пригоден для печати (Что там вообще принтер принимает? Картинку?)
    Ответ написан
  • Как в LibGit2Sharp сделать клон репозитория с заменой файлов?

    Вариант раз: Удалить старую папку и сделать git clone.
    Вариант два: Создать новую временную папку и скопировать из неё всё содержимое. Но что делать с самим репозиторием в таком случае - не ясно, как и то, что делать, если файлы есть в обоих папках.
    Вариант три: Как сказал oleg_ods - использовать git pull, чтобы обновить существующий репозиторий
    Вариант четыре: Создать новую папку, чтобы её имя не совпадало со старой, и клонировать репозиторий в неё.
    Ответ написан
    4 комментария
  • Считать ли класс, который реализует extern-методы, адаптером?

    Сложно сказать, есть ли у такого паттерна название. А это важно?
    Подобные штуки обычно обёртками называют
    Ответ написан
  • Где можно посмотреть проекты близкие к реальным по ASP.NET?

    eshoponweb и eshoponcontainers.
    Ещё, думаю, можешь посмотреть на какие-нибудь опенсорсные проекты. Например на SunEngine
    Ответ написан
    Комментировать
  • Как стримить кучу картинок с минимальной латенси?


    Захватывать картинки - есть либа и это вроде не сложно, но с веб апи я работал с обычными запросами, если я буду отправлять 24 картинки в секунду, даже разрешения 640 на 480 через пост запросы, это, блин, очень много запросов ) там не известно, какие-то кадры могут раньше приехать, какие-то зависнуть по разным причинам.

    Я бы посмотрел в сторону grpc streaming - там можно 1 раз открыть соединение и отправлять много сообщений + не нужно в base64 кодировать.
    Либо вообще подумал над собственным протоколом поверх tcp.

    Ещё в raspberry вроде есть аппаратный кодировщик видео - вероятно видео будет транслировать более эффективно, тк врядли между соседними кадрами будет очень большая разница, но как именно можно принять видео на стороне дотнета - хз. Возможно нужно будет ещё одно какое-то приложение поднять, которое будет читать поток видео и сохранять его в виде картинок.

    Нашёл ещё вот такую статью:
    https://www.codeproject.com/Articles/810004/Live-V...
    Ответ написан
    2 комментария
  • Mapping со сложной структурой?

    User user = null!;
    var userDto = new AllUserDataDto {
      TelegramUserIdDto = user.TelegramUserId,
      Steam = user.Accounts.Select(x => 
          new Steam {
            SteamIdDto = x.SteamId,
            Skins =  x.Items.Select(i=> new Skin { NameDto = i.MarketHashName  }
        })
        .ToList()
    };


    Кстати, а какой сакральный смысл в добавлении суффиксов Dto к именам свойств?
    Ответ написан
  • Как заоверлоудить Join одного параметра?

    На самом деле тебе нужен string.Join(",", source)
    Ну либо тебе нужен вот такой екстеншен:
    public static class StringExtensions {
      public static string Join<T>(this IEnumerable<T> parts, string separator) => 
        tring.Join(separator, parts);
    }
    Ответ написан
    Комментировать
  • Как из сайта по ссылке засунуть его в приложение на c#?

    Тебе нужно сделать десктопное приложение при помощи Winforms, WPF, или Avalonia, и добавить в окно Webview, в котором открыть этот сайт.

    Добавить webview ты можешь при помощи Webview2 или CEF
    Ответ написан
    1 комментарий
  • Как отследить выход из игры UNITY?

    Столкнулся я с вопросом "А как узнать, что игрок закрыл игру принудительно, не используя кнопку "Exit"?

    Ну например ты можешь при нормальном закрытии записывать какой-нибудь флаг в файл, типа "игра была закрыта нормально".
    Тогда при следующем запуске, обнаружив, что этот флаг не стоит - ты поймёшь, что в прошлый раз игра закрылась непредвиденным образом (принудительно или из-за отключения электричества)

    Также, было бы весело решить данный вопрос, если вы ответите на похожий вопрос "Как узнать время проведенное в афк?",

    Ну тут тебе сначала нужно дать определение, что такое афк в твоём случае :)
    К примеру, можно считать, что игрок отошёл, если от него не поступает сигнал N единиц времени.
    Тогда чтобы узнать время нахождения в афк - тебе нужно просто сохранять метку времени каждый раз, когда игрок как-то взаимодействует с игрой, а потом отнимать от последнего записанного времени N.
    Ответ написан
    2 комментария
  • Зачем нужен IHost и когда его полезно использовать в desktop-приложениях?


    Вроде бы IHost интерфейс появился как попытка унификации любого микросервиса и должен облегчать межсервисное взаимодействие и контейнеризацию. Поправьте, если я заблуждаюсь

    Как попытка унификации - да.
    Как попытка упростить межсервисное взаимодействие - нет.

    Главная задача IHost - упростить конфигурацию приложения и управление жизненным циклом (тот же graceful shutdown например тебе даётся из коробки, если ты используешь IHost)
    + Сразу автоматически получаешь преднастроенный IConfiguration, логирование и DI
    Ответ написан
    2 комментария
  • Можно ли вместо Delete-метода использовать POST?

    Да, так можно сделать.
    Только не сервере не забудь код поправить.

    Если бы серверную часть писал я, то я бы подумал над редизайном этой апишки, ибо принимать кучу query-параметров для удаления - это странно и не соответствует идеям rest.
    Ответ написан
    Комментировать
  • Какое решение задачи по циклам будет правильным?

    1. Определяемся с тем, что от нас хотят. Требования можно представить в виде такого псевдокода :)
    повторять всегда {
       сообщение = прочитать();
       если сообщение = "EXIT" то выйти;
       сообщение2 = прочитать();
       если сообщение2 = "EXIT" то выйти;
       количество_повторений = прочитать_число(сообщение2);
       повторять количество_повторений раз {
         напечатать(сообщение);
       }
    }


    2. Переводим буквально на C#:
    while(true) {
      Console.WriteLine("Введите сообщение");
      var message = Console.ReadLine();
      if (message == "EXIT") {
        return;
      }
      Console.WriteLine("Введите количество повторений");
      var message2 = Console.ReadLine();
      if (message == "EXIT") {
        return;
      }
      var count = int.Parse(message2); // по хорошему, надо бы как-нибудь обработать, если пользователь ввёл не число. В таком виде программа просто упадёт.
      for(var i=0; i<count; i++) {
        Console.WriteLine(message);
      }
    }
    Ответ написан
    Комментировать
  • Как сделать картинку размером более 100000 пикселей(png)?

    Битмап такой размер сделать не может.

    а затем редактировать её классом битмап?

    У тебя тут взаимоисключающие тезисы. Так что никак :)

    1. Учитывай, что такая "картинка" будет весить 232гб (для манипуляций с картинкой её надо распаковать), так что продуктивнее будет её разрезать на N тайлов чуть меньшего размера. Хотябы по 16к*16к пикселей
    2. Ты можешь взять ImageSharp(https://sixlabors.com/products/imagesharp/)
    или Skia:(https://github.com/mono/SkiaSharp) - в них меньше ограничений, чем у стандартного Bitmap, но всё равно врядли они смогут с гигантскими картинками работать.
    Ответ написан
    Комментировать
  • Вопрос по двумерным массивам?

    GetLength возвращает размерность каждого измерения.
    GetLength(0) - размер первого измерения (3)
    GetLength(1) - размер второго измерения (тоже три)
    Об этом сказано в документации: https://docs.microsoft.com/en-US/dotnet/api/system...
    Gets a 32-bit integer that represents the number of elements in the specified dimension of the Array.


    i используется для индексирования в рамках первого (0) измерения.
    j используется дли индексирования в рамках второго (1) измерения.
    Ответ написан
    Комментировать
  • Чем отличаются эти два типа записи?

    Эти две записи полностью эквивалентны, в чём можно убедиться через sharplab, выбрал декомпиляцию в более низкоуровневый C#.
    Во втором случае используется Object Initializer синтаксис.
    Второй более идиоматичный и ИМХО более читабельный.
    Ответ написан
    Комментировать
  • Как адекватно округлить Int до тысячи в сокращенной форме?

    textCost.text = ShortFormat((double) cost);
    
    // ...
    static string ShortFormat(double number) => number > 1000 ? $"{number/1000:F2}K" : number.ToString();
    Ответ написан
    Комментировать
  • Проблема с заполнением данных?

    Поиграю в угадайку. Видимо, у тебя ошибка на моменте, когда ты пытаешься присвоить свойству Accounts объект Account.
    Причина ошибки очевидна - ты сам объявил, что Accounts имеет тип HashSet`Account.

    Вот вариант исправленного кода:
    var user = new User
                {
                    TelegramUserId = addSteamAccount.TelegramId,
                };
    user.Accounts.Add(new Account { SteamId = addSteamAccount.SteamId });


    В будущем пиши, какая конкретно ошибка у тебя произошла и постарайся изолировать свою ошибку от всего остального проекта, ибо EF тут никаким боком не влияет, как и то что ты делаешь API, и то что у тебя есть ещё класс Inventory.
    Ответ написан
    Комментировать
  • Как Dictionary отобразить в html-шаблоне?

    Для вывода всех пар:
    {{#each dict}}
    <div>{{@key}}=>{{@value}}</div>
    {{/each}}


    Для вывода значения по какому-то заранее известному, предопределённому ключу:
    {{dict.[wellknown key]}}

    Модель, которую передаём в параметры:
    var args = new {dict = new Dictionary<string,string>()};
    var compiledTemplate = Handlebars.Compile(template);
    string templateOutput = compiledTemplate(args);
    Ответ написан
    Комментировать