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

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть: применить к каждому возвращенному имени папки функцию (статический метод) Path.GetRelativePath и записать результаты в новый массив. Короче всего это записать через LINQ, примерно так:
    String[] rel_folder_names = Directory.GetDirectories(RootFolder).Select(s=>Path.GetRelativePath(RootFolder,s)).ToArray();

    Но если пока не умеете или боитесь использовать LINQ, то можно это сделать в обычном цикле
    String[] full_folder_names=Directory.GetDirectories(RootFolder);
    String[] rel_folder_names = new String[](full_folder_names.Length);
    for(int i=0;i<full_folder_names.Length;i++) {
         rel_folder_names[i]=Path.GetRelativePath(RootFolder,full_folder_names[i]);
    }

    Как-то так.

    PS Весь код написан "из головы", так что ошибки могут быть.
    Ответ написан
    4 комментария
  • Откуда stackoverflow при работе с stackalloc c#?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Похоже (явного указания в документации я не нашел), что память в стеке освобождается только при выходе из всего метода, но не из блока внутри него. Освобождение памяти в стеке, как известно - это сдвиг указателя стека обратно, и похоже, этого в конце блока не происходит - только в конце метода. Косвенное подтверждение - в документации по stackalloc явно написано избегать вызовов stackalloc в цикле, как это у вас сделано: "Avoid using stackalloc inside loops. Allocate the memory block outside a loop and reuse it inside the loop." ( https://learn.microsoft.com/en-us/dotnet/csharp/la... )
    Ответ написан
    Комментировать
  • ASP.NET Core 6 Как устранить ошибку при выполнении команды update-database?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    'MultipleActiveResults=True'

    Уберите эти одинарные кавычки.
    Ответ написан
    Комментировать
  • Реализовать ajax в asp dot net core 6?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вы умеете отправлять и получать запрос с фронта в формате JSON на голом JS через XMLHttpRequest или fetch (либо у вас есть фронтовой фреймворк для этого), то вам повезло: сама Microsoft о вас позаботилась. Как раз в ASP.NET 6 появился Minimal API. Суть его в том, что если раньше базовые делегаты-обработчики конечных точек маршрутизации (подключаемые через Map/MapGet/MapPost etc) должны были иметь тип RequestDelegate (HttpContext context на входе, Task на выходе, а в context.Response изволь писать сам), то теперь делегаты-обработчики могут иметь произвольный тип (ну, почти): принимать произвольное количество произвольных параметров - ASP.NET привяжет их к путям/параметрам в URL и содержимому тела запроса как надо - и возвращать произвольный объект в качестве результата - он будет правильно записан в context.Response: например, если это обычный объект, то он будет послан как JSON. То есть, Minimal API - это новый способ написания контроллеров API, безо всякого MVC.
    Что касается вашего вопроса: если вы передадите с фронта через XHR/fetch объект в JSON с полями и значениями в них, то ASP.NET привяжет параметры метода-обработчика к одноименным полям объекта, а объект, возвернутый из метода-обработчика, закодирует в JSON. И никакого дополнительного фреймворка не надо.
    Подключаются эти обработчики все теми же методами Map/MapGet/MapPost etc: просто в качестве делегата передаете не RequestDelegate а нужный метод-обработчик.
    Но есть нюанс: в документации по ASP.NET 6 все это великолепие еще толком не описано - читайте документацию по ASP.NET 7: она в целом подходит, только не испольуйте группы маршрутизации и фильтры - их в ASP.NET 6 ещё не было.
    PS Кому интересно: как это работает под капотом(конкретно для ASP.NET 7), описано в серии статей Эндрю Лока (знаете такого автора книжек по ASP.NET?).
    Ответ написан
  • Как адаптировать MapPost в метод ControllerBase?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вынесено из комментариев (не туда запостил):

    Если бы я был контроллером API на MVC, я бы тоже так же ответил: "что за фигню вы мне прислали?" (в протоколе HTTP это обозначается кодом статуса 400).
    Контроллер API ждет, что вы ему пришлете, нечто, содержащее значение для параметра message вашего метода действия. Если вы посылаете в формате JSON, то - объект с полем message: тогда он привяжет значение этого поля входному параметру метода действия, который имеет то же имя message, как у вас.
    Потому в запросе POST надо слать объект с этим полем. Например - в уже сериализованном (строковом) формате:
    string content = "TestContent";
    Но можно в качестве content использовать и объект с полем message, например - анонимного типа:
    var content = new { message = "TestContent" };
    - PostAsJsonAsync сумеет превратить это в JSON.

    И да, к контроллеру на Minimal API из вашего первого комментария все это точно так же относится.
    Ответ написан
    Комментировать
  • У меня C# visual stiudio code в коде я пытаюсь отправить текст но появляется все равно hello, world что делать?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Меня смущает имя вашего класса: Programs. Посмотрите, нет ли у вас в проекте класса Program (без 's')? ;-)
    Ибо выполнение программы начинается с метода Main класса Program.
    Ответ написан
    Комментировать
  • Почему нельзя писать поле в интерфейсе?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Потому что интерфейс, по идее, не содержит внутри себя никаких данных - только список методов.
    Поэтому полей в интерфейсе нет. А свойства - это не поля, это упрощенный синитаксис для вызова методов-аксессоров: метода получения связанного с объектом значения и (если реализовано) его установки. Поэтому ничто не мешает интерфейсу их содержать.
    PS Автоматически реализуемое свойство объекта - типа того, что вы написали в начале - оно только внешне похоже на описание свойства в интерфейсе. В интерфейсе пустые тела аксессоров (так же, как и других методов) означают, что наследующий этот интерфейс класс обязан их реализовать. А автоматически реализуемое свойство объекта - это синтаксический сахар, скрывающий от глаз реализацию: автоматически создаваемое компилятором поле с простейшими аксессорами - прочитать поле и записать в поле.
    Ответ написан
    Комментировать
  • В чем различие между делегатоми и событиями?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Событие (event) - это синтаксический сахар, которым посыпан механизм вызова одного или несколких методов на основе базового для всех делегатов встроенного типа Delegate (вызов нескольких методов реализует класс MulticastDelegate, унаследованный от Delegate) Компилятор же, встретив ключевое слово event, создает переменную-делегат указанного типа с тем же именем (далее ИмяСобытия), доступную только внутри класса (т.е. private) и два метода: add_ИмяСобытия и remove_ИмяСобытия. А встретив операторы += и -= для подписки/отписки вызывает соответсвующий метод. Подробнее можно посмотреть в главе 11 книги Джеффри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#".
    Вызывать несколько методов можно и через один делегат - см. пример в справке для класса MulticastDelegate.
    Ответ написан
    Комментировать