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

    В launchsettings.json можно выключить.
    Просто свойство launchBrowser нужно сделать false.
    Ответ написан
    Комментировать
  • Нужна ли математика .net разработчику?

    Большинство .net вакансий - это Энтерпрайз.
    Математика нужна на уровне арифметики начальной школы.
    В геймдеве - наверно на уровне тригонометрии из старшей школы, если говорить о разработке под готовым движком
    Ответ написан
    Комментировать
  • Исключение не обработано, как исправить?

    В классе general_form я создаю экземпляр ReadyLoad.

    Это и повлияло.
    Ошибка "System.StackOverflowException" говорит о том что у тебя переполнился стек.
    Стек имеет ограниченные размеры, и каждый раз, когда вызывается функция - из него выжирается кусок, а когда функция завершается - этот кусок освобождается

    А теперь о произошедшей ситуации:
    Класс ReadyLoad после компиляции превращается вот в это:
    internal class ReadyLoad {
      private general_form gm_Link;
      public ReadyLoad() {
        gm_Link = new general_form();
      }
    }

    Конструктор - это тоже функция.
    Соответственно, когда вызывается конструктор new ReadyLoad - внутри него вызывается new general_form(), а внутри него также вызывается конструктор new ReadyLoad() и так, пока стек не переполнится.
    Когда стек переполняется - твоя программа убивается.

    В твоём случае необходимо от этого цикла избавиться)
    Как именно - зависит от случая.

    PS: О том, что такое стек можешь почитать тут: https://metanit.com/sharp/tutorial/2.16.php
    Ответ написан
    9 комментариев
  • Почему в Visual Studio Code отсутствует обыкновенный сниппет Print?

    Такого сниппета и не было никогда в C# екстеншене.
    Может, тебя интересует вот это?
    https://marketplace.visualstudio.com/items?itemNam...
    Или любой другой экстеншен для юнити
    Ответ написан
    1 комментарий
  • Как уменьшить размер занимаемого места массивом?

    Можно ли как-то "сжать" все это дело?

    Скидывать логи сначала на диск, а потом кусками вычитывать и отображать.
    В памяти держать только некоторый адекватный кусок, чтобы успеть подгрузить следующую пачку, пока пользователь скроллит.
    Ответ написан
    4 комментария
  • Компиляция .NET 7 в нативный код?

    .NET 7 ещё не вышел. Планируется на следующий год.
    На данный момент есть только R2R + Assembly Trimming + Single file + Self contained + PGO что даёт в целом схожий с golang экспириенс

    UPD: вот тут можно следить за прогрессом NativeAOT https://github.com/dotnet/runtime/issues/61231
    Ответ написан
    Комментировать
  • Как спрятать пароль?

    Ведь часть исходного кода порой можно глянуть сторонними инструментами.

    Если это бэкенд, то какими ещё инструментами можно глянуть без прямого доступа к исходному коду и файловой системе сервера, где это запускается?

    А так из вариантов, как убрать его из исходников - прокидывать как параметр в конфиге или в переменных среды.
    Или использовать какое-нибудь секурное хранилище.
    Например Vault или Azure Key Vault.
    Ответ написан
    Комментировать
  • Как получить всю БД в виде csv?

    С джоинами будет сложновато, но со всем остальным:
    1. Определяешь тип БД (раз уже подключился - значит известен)
    2. В большинстве СУБД можно динамически получить список всех таблиц/коллекций (эту информацию можно получить из служебных таблиц, имя и структура которых известна заранее)
    3. По данным из п2 делаешь N запросов SELECT * from {tableName} (как в монге это сделать - не подскажу)
    И через DataReader читаешь таблицу и пишешь в csv.

    А ещё для некоторых субд могут быть уже готовые инструменты для экспорта данных.
    Например mysqldump, pg_dump, mongodump итд, которые как раз и делают вышеописанное.

    На счёт джоинов - никогда подобное не видел, и в общем случае такое сделать не получится.
    Ответ написан
    Комментировать
  • Vs code или vs (для c#)?

    Rider > VS > VS Code
    В VS Code поддержка C# реализована через omnisharp и пачку сторонних плагинов, что вместе работает не супер стабильно, да и денег команде Omnisharp явно не хватает, чтобы всегда успевать за обновлениями и добавлять какие-то ещё рефакторинги.
    VS даже в Community версии, даже без решарпера сильно удобнее.

    Если есть возможность - лучше взять подписку на JB Rider (моё мнение)
    Ответ написан
  • Как создать программу с методом, реализующий один из рекурсивных алгоритмов?

    Ну вообще это задание, а не вопрос, в такой формулировке.
    Сумму можно посчитать так:
    public static int Sum(int[] numbers, int start, int count) {
      if(count < 0 || count > numbers.Length)
        throw new ArgumentOutOfRangeException(nameof(count));
      if(start < 0 || start >= numbers.Length || start + count > numbers.Length)
        throw new ArgumentOutOfRangeException(nameof(start));
      return count == 0 
        ? 0
        : numbers[start] + Sum(numbers, start+1, count-1);   // Вот тут наша рекурсия
    }

    На счёт арифметической последовательности - зависит от того, как она выражена.
    Ответ написан
    Комментировать
  • Почему так медленно происходят вычисления?

    Вычисления происходят быстро, просто у тебя 99% времени происходить вывод в консоль.
    Ответ написан
    Комментировать
  • Как на C# делать андроид игры (НЕ unity)?

    Либо Unity, либо Godot, либо Xamarin.
    Любое приложение на андроид требует небольшую обёртку на жаве, чтобы запуститься.
    Движки её делают за тебя.
    Ответ написан
    Комментировать
  • Как можно присвоить переменной перечисления обычный string?

    enum SomeEnum {
      A,
      B
    }
    var text = "B";
    var enumValue = Enum.Parse<SomeEnum>(text); // SomeEnum.B


    PS: в .net standard < 2.1 и .net framework нет такого метода, зато есть
    var enumValue = (SomeEnum) Enum.Parse(typeof(SomeEnum), text);
    Ответ написан
  • Как отработают throw?

    Здесь никак не отработают, тк блок try пуст.

    Но если бы что-то было, то:
    При выпадении CustomException исключение было бы подавлено.
    При выпадении любого другого - оно было бы проброшено дальше без изменений.
    До этих строк выполнение бы не дошло. О чём кстати любая IDE говорит
    throw ex;
    throw new MyEx(ex);

    Ну и гарантированно бы ещё выполнился блок finally после отработки всех catch-ей, но перед падением.
    61b9e108af4d3560067099.png
    Ответ написан
    Комментировать
  • На чем лучше делать маленькое API?

    Не asp, а asp net core.
    В целом - почему нет? Для маленьких апишек в 6й версии даже новый синтаксис появился: ASP NET Core minimal api
    Ответ написан
    1 комментарий
  • Заполнить динамически экземпляр list?

    ну вообще не красивый код, но если прям очень нужно, то пиши так:
    var employeeList = objListList[0].Select(x=>x as Employee).ToList();

    Каст необходим, тк у тебя лист из объектов
    Ответ написан
  • Какая самая быстрая проверка на null?

    Я проверил на 10 млн объектов и получилось что foo is null в 20 раз быстрее чем foo == null. Поэтому и интересно какой способ самый быстрый.

    Вы же в курсе, как нужно проводить тесты на производительность ?)
    foo == null, foo is null, ReferenceEquals(foo, null) - все они компилируются в одно и то же, по тому разницы никакой нет.
    Пояснение

    Вот код:
    public class Benchmark
    {
        private static readonly object? Obj = new();
        [Benchmark]
        public bool EqualityOperator() => Obj == null;
        [Benchmark]
        public bool PatternMatching() => Obj is null;
        [Benchmark] public bool ComplexPatterMatching() => Obj is not { };
        [Benchmark] public bool ConstantReturn() => false;
        [Benchmark] public bool EqualsCall() => Obj!.Equals(null);
        [Benchmark] public bool ReferenceEqualsCall() => ReferenceEquals(Obj, null);
    }

    Вот IL:
    .method public hidebysig instance bool
        EqualityOperator() cil managed
      {
        .custom instance void [BenchmarkDotNet.Annotations]BenchmarkDotNet.Attributes.BenchmarkAttribute::.ctor()
          = (01 00 00 00 )
        .maxstack 8
    
        // [10 39 - 10 50]
        IL_0000: ldsfld       object Benchmark::Obj
        IL_0005: ldnull
        IL_0006: ceq
        IL_0008: ret
    
      } // end of method Benchmark::EqualityOperator
    
      .method public hidebysig instance bool
        PatternMatching() cil managed
      {
        .custom instance void [BenchmarkDotNet.Annotations]BenchmarkDotNet.Attributes.BenchmarkAttribute::.ctor()
          = (01 00 00 00 )
        .maxstack 8
    
        // [12 38 - 12 49]
        IL_0000: ldsfld       object Benchmark::Obj
        IL_0005: ldnull
        IL_0006: ceq
        IL_0008: ret
    
      } // end of method Benchmark::PatternMatching
    
      .method public hidebysig instance bool
        ComplexPatterMatching() cil managed
      {
        .custom instance void [BenchmarkDotNet.Annotations]BenchmarkDotNet.Attributes.BenchmarkAttribute::.ctor()
          = (01 00 00 00 )
        .maxstack 8
    
        // [13 56 - 13 70]
        IL_0000: ldsfld       object Benchmark::Obj
        IL_0005: ldnull
        IL_0006: cgt.un
        IL_0008: ldc.i4.0
        IL_0009: ceq
        IL_000b: ret
    
      } // end of method Benchmark::ComplexPatterMatching
    
      .method public hidebysig instance bool
        EqualsCall() cil managed
      {
        .custom instance void [BenchmarkDotNet.Annotations]BenchmarkDotNet.Attributes.BenchmarkAttribute::.ctor()
          = (01 00 00 00 )
        .maxstack 8
    
        // [15 45 - 15 62]
        IL_0000: ldsfld       object Benchmark::Obj
        IL_0005: ldnull
        IL_0006: callvirt     instance bool [System.Runtime]System.Object::Equals(object)
        IL_000b: ret
    
      } // end of method Benchmark::EqualsCall
    
      .method public hidebysig instance bool
        ReferenceEqualsCall() cil managed
      {
        .custom instance void [BenchmarkDotNet.Annotations]BenchmarkDotNet.Attributes.BenchmarkAttribute::.ctor()
          = (01 00 00 00 )
        .maxstack 8
    
        // [16 54 - 16 80]
        IL_0000: ldsfld       object Benchmark::Obj
        IL_0005: ldnull
        IL_0006: ceq
        IL_0008: ret
    
      } // end of method Benchmark::ReferenceEqualsCall

    Тоесть в теории всё должно быть одинаково, кроме ReferenceEquals и ComplexPatternMatching. Но есть же ещё JIT и PGO. (надеюсь, что они не испортят результаты теста, и не превратят сравнение в константу)
    Блин, таки превратил в константу

    |                Method |      Mean |     Error |    StdDev |    Median |
    |---------------------- |----------:|----------:|----------:|----------:|
    |      EqualityOperator | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.0000 ns |
    |       PatternMatching | 0.0300 ns | 0.0164 ns | 0.0145 ns | 0.0271 ns |
    | ComplexPatterMatching | 0.0401 ns | 0.0327 ns | 0.0376 ns | 0.0267 ns |
    |        ConstantReturn | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.0000 ns |
    |            EqualsCall | 1.3787 ns | 0.0437 ns | 0.0409 ns | 1.3770 ns |
    |   ReferenceEqualsCall | 0.0000 ns | 0.0000 ns | 0.0000 ns | 0.0000 ns |


    Вот нормальный результат бенчмарка после засовывания поля в свойство и запрета на инлайнинг и оптимизацию этого свойства:
    |                Method |      Mean |     Error |    StdDev |
    |---------------------- |----------:|----------:|----------:|
    |      EqualityOperator | 2.5751 ns | 0.0062 ns | 0.0049 ns |
    |       PatternMatching | 2.5682 ns | 0.0073 ns | 0.0065 ns |
    | ComplexPatterMatching | 2.6456 ns | 0.0744 ns | 0.0696 ns |
    |        ConstantReturn | 0.0065 ns | 0.0044 ns | 0.0035 ns |
    |            EqualsCall | 4.6958 ns | 0.0337 ns | 0.0282 ns |
    |   ReferenceEqualsCall | 2.9525 ns | 0.0667 ns | 0.0557 ns |

    Тоесть все различия на уровне погрешности.
    А вот и JITAsm: sharplab


    PS: результаты бенчмарка не актуальны для Nullable, но там должно быть аналогично - только ReferenceEquals не стоит звать, и хз что будет при is not {}
    Так что я бы использовал is null либо == null
    PPS: если используется юнити - то там тоже не очень актуально, тк в юнити другой JIT, нет PGO, да и вообще может использовать IL2CPP
    PPPS: тут ещё подсказывают, что == может иметь неожиданное поведение из-за перегрузок операторов.
    Ответ написан
    6 комментариев
  • Как хранить переменную в сети c#(unity)?

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

    PS: Абстрактный вопрос = абстрактный ответ.

    PPS: Посмотрел на твои предыдущие вопросы: раз уже знаком с Flask, то почему бы не сделать на нём апишку и какой-нибудь базой данных?
    А на стороне юнити делать запросы через HttpClient
    Ответ написан
    Комментировать
  • Чем отличается язык программирования?

    Могу ли я использовать свой опыт C# .NETFramework 4.8 в остальных реализациях?

    Да. Хотя не уверен, что у тебя есть какой-то значимый опыт, судя по вопросам.
    В интернете есть 3 версии языка программирования

    Версии самого C# идут от 1 до 10, включая ещё дробные 7.1 и 7.2
    А ты перечислил разные версии конкретных реализаций рантайма (mono, netcore, .net framework)
    Да и вообще сейчас актуальная - .NET 6 (без слова "framework")
    Ответ написан
    Комментировать