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

    NPOI и OpenXML Sdk
    Ответ написан
    Комментировать
  • Как разобраться в работе с сетью в c#?

    1. Например ты можешь перекладывать данные из буфера куда-то ещё. В List<byte> например.
    А лучше переработай свой протокол, чтобы в этом не было нужды (чтобы где-то в начале сообщения писалось, сколько места тебе нужно выделить)

    2. Посмотри в сторону System.IO.Pipelines - там уже решены практически все проблемы, с которыми можно столкнуться.

    3. Подумай над тем чтобы использовать уже готовый протокол типа того же http
    Ответ написан
    Комментировать
  • Как собрать проект с WebView2 в 1 exe файл?

    При сборке добавь ещё --self-contained либо установи рантайм на этот ПК.
    Ответ написан
  • WebView2 + costura?

    Costura собирает только managed код в себя.
    WebView2 - это уже unmanaged.

    Переходи на dotnet 6 - там можно включить неуправляемые библиотеки так, чтобы они распаковывались при запуске.

    PS: single file для десктопных приложений переоценён. Обновления, например, гораздо легче накатывать, когда у тебя много файлов, тк те файлы, которые не изменились, можно будет не передавать при обновлении
    Ответ написан
    2 комментария
  • Как правильно хранить изображения в SQL и как правильно работать с ними в WPF проекте?

    Идеальное решение без лишних рассуждений

    Картинки - в S3, а перед S3 поставить CDN, чтобы сильно S3 не нагружать.
    В центральную базу данных на сервере - только идентификаторы картинок.

    Клиент (на WPF) будет обращаться к какому-то приложению, которое написано на ASP NET Core, а оно, в свою очередь, будет идти в центральную БД за всякой инфой.

    Опционально - клиент будет идти в CDN за картинками.
    Сами картинки потом пусть кэшируются в ФС, чтобы не нужно было идти за ними повторно.
    Данные о модах тоже можно кэшировать, но уже в sqlite - это полезно будет, пока нет интернета, или пока актуальный список модов загружается.



    Да, единственный хороший вариант хранить картинки в базе - это не хранить картинки в базе, а хранить лишь пути или идентификаторы картинок.

    Главный минус картинок в ФС - это то что они будут привязаны к одному серверу. Лучше хранить картинки в другой системе (S3 или CDN) и хранить в базе их идентификаторы, чтобы потом клиент мог сам их скачать, если это необходимо. Так раздача картинок не будет привязана к основному серверу.

    А клиент пусть их кэширует также у себя на диске.

    В будущем я хотел бы попробовать сделать так, чтобы база была на каком-то сервере, чтобы многие могли пользоваться приложением, но не думаю, что это будет нормально работать, да и вообще не красиво( Заранее спасибо.

    Если ты хочешь, чтобы разные пользователи имели доступ к единой базе модов, то действительно надо сделать какой-то сервер.

    Ну и клиент на WPF не должен напрямую подключаться к MS SQL.
    MS SQL должен находится где-то на сервере и спрятан за каким-то другим web-сервером (который будет написан с использованием ASP NET Core например), который будет уже отвечать за всякую логику.
    Если тебе нужна локальная база данных на клиенте (для кэша например), то лучше использовать sqlite.
    Ответ написан
    2 комментария
  • Как десериализовать простой Json в массив?

    Десериализуй в объекты, а затем делай Select.
    Ответ написан
    Комментировать
  • Можно ли просто передать exe или передать папку Release wiforms c#?

    Следует не сборку делать, а "публикацию", тк сборка предназначена для разработки и студия иногда может не скопировать некоторые зависимости в папку Release исходя из того что эти зависимости и так доступны глобально на компьютере разработчика.
    Ответ написан
    Комментировать
  • Стоит ли вообще искать интернет-ресурсы, где описано как "подружить" ASP.NET с MySQL?

    Используй Pomelo.EntityFrameworkCore.MySql

    информации насчёт того, как делать миграции в MySQL средствами Visual Studio

    Сейчас миграции делаются не средствами студии, а средствами efcore cli - в этом плане раскатка миграций никак не отличается от любой другой СУБД.

    и как, собственно настраивать проект под ASP.NET (options, builder, Swagger (не удивляйтесь, пока я именно его использую, т.к. при обкатке новой СУБД такой выбор очевиден) и прочее).

    Они ортогональны и никак не зависят от СУБД.

    PS: зачем тебе mysql, когда есть postgres?
    Ответ написан
    1 комментарий
  • Как можно перебрать огромный массив, состоящий из более чем 10000 элементов с условием?

    1. Убери вот эту пакость:
    string.Join("", array1[i].ToUpper().Split())
    2. Переложи все данные в HashSet - тогда проверка наличия строки будет происходить за адекватное время.
    У HashSet даже есть метод Intersect который возвращает true, если в двух наборах есть какие-то общие элементы.
    Ответ написан
    2 комментария
  • Как правильно и удобно читать данные из БД?

    1. async-await используй
    2. Используй какую-нибудь orm-ку (EF core, Dapper, linq2db). Многие из них как правило явно запрещают параллельные запросы в рамках одной транзакции.

    Но вроде чисто в теории sqlite разрешает конкурентное чтение (но не запись)
    Ответ написан
    Комментировать
  • Зачем нужен оператор fixed в c#?

    fixed запрещает перемещать объект в памяти.
    Сборщик мусора может и не соберёт объект, но без fixed он может его переместить и тогда указатель станет невалидным.

    stackalloc выделяет данные на стеке, а по тому с ним такой проблемы нет, ну и да - он не нагружает gc, хоть и обладает кое-какими другими потенциальными проблемами.
    Ответ написан
    3 комментария
  • Норм ли использовать MSTest для создания юнит-тестов под .NET-проект (см. внутри)?

    1. Есть xunit
    2. Есть библиотеки с альтернативными ассертами. Например я везде fluentassertions использую
    3. Mstest на коре вроде тоже есть.
    4. Вместо атрибута ExpectedException лучше использовать аналогичный ассерт:
    https://docs.nunit.org/articles/nunit/writing-test...


    позволяет удобно работать с XML-файлами и не только

    Фу какая гадость. Зачем тебе это в тест-фреймворке???


    AssemblyInitialize!

    Зачем он тебе?
    Ответ написан
    Комментировать
  • Почему не могу добавить dockerfile в проект?

    Да, из-за этого - об этом и говорится в ошибке.
    Решить можешь тремя вариантами:
    1. Скопируй DLL из того проекта в этот.
    2. Скопируй сам проект
    3. Упакуй тот проект как nuget-пакет
    Ответ написан
  • Почему может не срабатывать финализатор при вызове GC.Collect?

    1. Финализация вполне может быть отложена по усмотрению сборщика мусора
    2. JIT вполне может так скомпилировать твой код, что вот этот = null будет опущен => при поиске ссылок, ссылка всё ещё будет на стеке.
    Попробуй вынести в новый метод и посмотреть там.

    Ну и такой код как у тебя в реальном мире лучше не использовать (это я про принудительный вызов гц, логи в финализаторе, и финализатор который не чистит неуправляемые ресурсы)

    PS: читаем внимательно документацию и особенно слова "не гарантирует"

    Используйте параметр , mode чтобы указать, должна ли сборка мусора происходить немедленно или только при оптимальном времени для освобождения объектов. Использование этого метода не гарантирует, что вся недоступная память в указанном поколении будет освобождена.

    Чтобы настроить навязчивость сборки мусора в критические периоды в приложении, задайте LatencyMode свойство .

    Сборщик мусора не собирает объекты с номером поколения, превышающим указанное параметром generation . Используйте свойство , MaxGeneration чтобы определить максимально допустимое generationзначение .

    Чтобы сборщик мусора учитывал все объекты независимо от их создания, используйте версию этого метода, которая не принимает параметров.

    Чтобы сборщик мусора отнимает объекты до указанного поколения объектов, используйте перегрузку GC.Collect(Int32) метода . При указании максимального поколения собираются все объекты.
    Ответ написан
    5 комментариев
  • C#, обработка исключений, почему нельзя обратится к свойству, через имя класса?

    потому что DivideByZeroException.Message - это попытка обратиться к статическому члену класса.
    Нет переменной - нет и возможности обратиться к данным.

    Если считаешь что так быть не должно - пиши предложение в language design, описывай зачем это надо, во что оно должно компилироваться на уровне IL, и как не сломать существующий код.
    Ответ написан
    Комментировать
  • С чего начать обучение программированию?

    Предположим, вы – учитель, чья задача научить школьника/студента программированию. С чего можно начать первое занятие? Можно начать рассказывать о системах счисления, архитектуре процессора, компиляции, интерпретации и прочих вещах, но разве они и вправду так нужны новичку, которому надо просто написать змейку?

    Начинать нужно с того, зачем вообще это нужно ученику, и что у него должно получиться в результате.
    А что именно изучать - проще посмотреть как это сделано у других. Например глянь как устроен курс CS50 - это не только лишь программирование, а в целом компьютерные науки.
    Ответ написан
  • В чём причина ошибки "CS0117: `Math` does not contain a definition for `Sin`"?

    Потому что у тебя не тот Math используется.
    У тебя конфликт имён и в таком случае приоритет даётся текущему неймспейсу емнип.
    Пиши System.Math.Sin, либо добавь свой неймспейс, либо используй top level statement, либо переименуй класс свой
    Ответ написан
    Комментировать
  • Как сделать ввод нескольких переменных ReadLine в одну строку?

    Например так:
    var line = Console.ReadLine();
    var items = line.Split(' ');
    var a = int.Parse(items[0]);
    var input = char.Parse(items[1]);
    var b = char.Parse(items[2]);
    Ответ написан
    2 комментария
  • Что за тип Unit в Haskel Rust Kotlin? Чем отличается от Void?

    vabka
    @vabka Куратор тега Rust
    void означает, что функция ничего не возвращает. Такие функции не получится использовать в выражениях и их результат нельзя никуда присвоить. Из-за этого многие обобщённые вещи приходится писать по два раза: один раз для обычных функций и ещё раз для функций, которые возвращают void.
    Такие функции ещё называют процедурами.

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


    Можно ли увидеть аналог пример кода на c# java с этим типом?

    Нельзя, тк в их системе типов такого типа просто нет. Можно его имитировать при помощи пустой структуры например.
    Но в мире дотнета есть f#, а в мире жавы - скала и котлин.

    А еще, вот к примеру я придумал, почему нету(может этот тип и есть), К примеру в c# есть понятие Boxing типов при касте через object
    int a=(int)(object)1;
    Что довольно дорого и долго. С выделением памяти в куче.
    А почему нету Типа, который ни чего не упаковывает, а просто передает двойное машинной слово? Ведь это прекрасно покроет все простые структурные типы, int char double., Enum, кортежи в 8 байт. А все остальное уже как объект.

    1. А что делать если тебе боксинг явно нужен?
    2. А где ты будешь метаданные передавать? Как в такой ситуации отличить тот же long от ссылки на объект?
    3. По спецификации передаётся ссылка, а не двойное машинное слово.

    И каким боком боксинг имеет отношение к юниту?
    Ответ написан
    3 комментария