Ответы пользователя по тегу C#
  • Есть ли разница между is и Type.IsAssignableFrom?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Нет, это не одно и то же.
    оператор is под капотом вызывает IL-инструкуцию isinst
    И работает она с экземплярами объектов.
    Test if obj is an instance of class, returning null or an instance of that class or interface.

    https://sharplab.io/#v2:C4LglgNgPgAgTARgLACgYGYAE9...
    https://en.wikipedia.org/wiki/List_of_CIL_instructions

    А Type.IsAssignableFrom - работает с экземпляром типа Type, и делает много сложных проверок:
    https://source.dot.net/#System.Private.CoreLib/Typ...
    Ответ написан
    2 комментария
  • Существует ли документация sfml для C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Документации специально для шарпа нет.
    На русском языке документации также нет.

    Но в принципе там обёртка очень тонкая, по тому документация от плюсов актуальна - вместо геттеров/сеттеров будут свойства, а вместо pollEvent/waitEvent будут шарповые евенты.
    Ну и названо всё будет так, как должно быть в шарпе (с большой буквы).

    Если тебя устроит - можешь использовать исходники, как документацию: https://github.com/SFML/SFML.Net
    Ответ написан
  • C# Можно ли объявить внутри цикла "глобальные" переменные?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Тебе нужен List
    // Заранее объявляем наш список
    var data = new List<int>();
    
    for(var i = 0; i < 10; i++) {
      data.Add(i); // В цикле добавляем в него значения.
    }
    
    // теперь у нас есть список data, в котором лежат числа от 0 до 9 (10 штук)
    // К ним в дальнейшем можно обратиться так:
    Console.WriteLine(data[0]); // Печатаем первое число из списка
    Console.WriteLine(data[9]); // Печатаем десятое число из списка.
    Console.WriteLine(data[^1]); // Обращаемся к первому с конца (последнему)
    Ответ написан
    3 комментария
  • Как исправить ошибку cs1519?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    У тебя скобки криво стоят.
    А конкретно у тебя if снаружи метода - скорее всего лишняя закрывающая скобка.

    Если нажмёшь кнопку "format document", то даже можно будет визуально увидеть, в каком месте всё ломается
    Ответ написан
    Комментировать
  • Почему дефолтном шаблоне один Program.cs вместо Program.cs и Startup.cs?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Предположу, что вы увидели новый шаблон из .net 6:
    var builder = WebApplication.CreateBuilder(args);
    var app = builder.Build();
    app.MapGet("/", () => "hello world");
    app.Run();

    В .NET 6 ввели новый более компактный синтаксис, который заменяет Startup.cs.
    Гуглить по словосочетанию "asp net core minimal api"
    Если очень хочется - можете руками создать Startup.cs, его не удалили.
    Ответ написан
    2 комментария
  • Как запустить страничку на React из проекта ASP.NET?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    У тебя уже есть UseStaticFiles, так что должно работать.
    "страничка на реакте" запускается в браузере, так что от сервера необходимо только раздать файлы.
    https://docs.microsoft.com/en-us/aspnet/core/funda...
    Зачем JsEngineSwitcher и AddReact хз. Можно же просто на стороне IIS статику раздавать, не напрягая бэкенд (а можно вообще без IIS жить - нафига платить кучу денег на лицензию винды nginx)
    Ответ написан
    4 комментария
  • Почему Thread работает так?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Это не тред виноват, а замыкания.
    Когда ты ссылаешься в лямбде на переменную - к ней обращение происходит по ссылке.
    Вот и получилось, что на момент запуска значение i уже 2.
    Решить эту проблему можно, если скопировать значение i в новую переменную вот так:
    for (int i = 0; i < 2; i++)
    {
        var i2 = i;
        Thread thread = new Thread(() =>
        {
            Console.WriteLine("main index: " + i2);
        });
        thread.Start();
    }
    Ответ написан
    Комментировать
  • Стоит ли использовать в одном проекте EF Core и Dapper?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Да, это очень распространённый Паттерн, и так даже в больших проектах делают.
    Но Join с OrderBy можно и на EF написать

    Но советую посмотреть на linq2db.
    С ним можно даже сложные запросы с CTE и оконными функциями на linq писать
    И у него нет такого оверхеда, как у EF.
    Из минусов - нет встроенного механизма для миграций.

    Но вроде есть пакет для интеграции с EF - можно описывать схему и накатывать миграции при помощи EF, а запросы писать с linq2db
    Ответ написан
    Комментировать
  • Как округлить число в C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Можно например так:
    Math.Round(625d / 10d, 0) * 10d; //620
    Math.Round(625d / 100d, 0) * 100d; //600
    Ответ написан
    Комментировать
  • Как происходит приведение типов в C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    При даункасте нужно сначала проверить, можно ли привести тип к нужному, и кинуть исключение, если нельзя.
    Бросание исключений - дороже, чем просто вернуть false или null, как в случае с is/as.

    А апкаст гарантированно всегда пройдёт, по тому он дешевле, чем даункаст - JIT просто убирает код, который отвечает за кидание исключений.
    По тому в случае апкаста as T и (T) даёт одинаковый результат.
    Ответ написан
  • Как вывести даты из списка, где dd = 20?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вариант 1, с парсингом дат:
    var dates = new[] {
                    "20.11.2021",
                    "10.11.2020",
                    "18.08.2017",
                    "20.05.2019",
                    "06.10.2013"
    };
    var lateDates = from date in dates 
                    let value = DateOnly.ParseExact(date, "dd.MM.yyyy") // DateOnly добавили в .net6, но можно спокойно вместо него использовать DateTime
                    where value.Day == 20
                    select value; // вместо value можно выьрать date
                    
    foreach(var d in lateDates) 
      Console.WriteLine(d);


    Вариант 2, через split:
    var dates = new[] {
                    "20.11.2021",
                    "10.11.2020",
                    "18.08.2017",
                    "20.05.2019",
                    "06.10.2013"
    };
    var lateDates = from date in dates
                    let dayPart = date.Split(".", 2)[0]
                    let dayOfMonth = int.Parse(dayPart) // тут можно тупо без парсинга сделать where dayPart == "20"
                    where dayOfMonth == 20
                    select date;
    foreach (var d in lateDates)
        Console.WriteLine(d);


    В обоих случаях вместо parse можно использовать TryParse, чтобы обработать ошибку нормально, но тогда немного сложнее будет код.

    3. Ещё весёлый вариант, специально под такую задачу.
    Можно тупо проверять, что строка начинается с 20
    var data = dates.Where(x => x.StartsWith("20."));
    foreach(var d in data)
      Console.WriteLine(d);
    Ответ написан
    4 комментария
  • Что получится при десериализации пустого списка?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    При стандартных настройках:
    1. При десериализации ты получишь пустой список
    2. При сериализации ты получишь json из примера.

    Очень легко можно проверить самостоятельно, компьютер от этого не сломается.
    https://dotnetfiddle.net/Nsf8Bb
    И это было бы быстрее, чем задавать вопрос тут, мне кажется.
    Ответ написан
    Комментировать
  • Ошибка CS0029 неявно преобразовать тип string к Consoleapp.programm.info?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Замени приватные поля на публичные свойства
    2. Дай нормальные имена всему.
    Классы должны называться с большой буквы.
    Публичные свойства должны называться с большой буквы.
    3. Изучи базовый синтаксис.
    Каким образом ты пытаешься записать значение в необъявленную переменную name?
    Куда должно сохраниться civilName, если у тебя нет переменной namecivil, и в ней тем более нет поля info?
    4.
    using System;
    
    
    Console.WriteLine("Hello , write your name.");
    var name = Console.ReadLine();
    Console.WriteLine($"Name: {name} ");
    Console.WriteLine("Write name of your civilization");
    var civilzationName = Console.ReadLine();
    Console.WriteLine($"Civilization name - {civilzationName} ");
    var info = new Info
    {
        Name = name,
        CivilizationName = civilzationName
    };
    Console.WriteLine(info);
    
    record Info
    {
        public string Name { get; init; } = "";
        public string CivilizationName { get; init; } = "";
        public int People { get; init; }
        public int Army { get; init; }
        public double Economy { get; init; } = 1.00;
        public double Money { get; init; } = 5.00;
    }
    Ответ написан
  • Как использовать элементы asp?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    В MVC нельзя использовать элементы из WebForms.
    Вот что следует использовать вместо них:
    https://qna.habr.com/q/1079220

    Ну или если у вас есть возможность использовать .net6 - посмотрите на Blazor.
    Ответ написан
    Комментировать
  • Как обрабатывать события в asp.net?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    В MVC -никак.
    На js ловишь события, и отправляешь http-запросы к твоему бэкенду.
    Через XMLHTTPRequest, fetch, или $. ajax
    Либо через отправку форм - тут аналогично, просто уже через form, а не через js

    Можно с полной перезагрузкой страницы, а можно ajax
    Ответ написан
    Комментировать
  • Как ведут себя логические операторы в сложных ситуациях?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Это не совсем логические операторы.
    Это побитовые операторы, и операции они проводят над битами.
    Например (в двоичной системе)
    100 | 001 = 101
    100 & 111 = 100
    110 ^ 011 = 101

    А про то, почему именно такой результат при работе с отрицательными числами - это тебе дз
    Ответ написан
    1 комментарий
  • Почему возникают ошибки с БД при разработке веб на mvc5?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Написано же в ошибке:

    Cannot drop database "realtyStore.Models.RealtyContext" because it is currently in use.

    Значит вы где-то пытаетесь сделать DROP DATABASE, когда она используется.

    Кстати контекст следует диспозить после использования. Иначе у вас утечка будет.

    Обычно этим занимается DI-контейнер

    А вот эта шняга вызовет у вас перебор всех данных в БД
    foreach(var r in db.Realties)
                {
                    if (id != null && id == r.Id)
                    {
                        realty = r;
                    }
                }

    Лучше заменить на
    ViewBag.Realty = db.Rwalties.FirstOrDefault(x=>x.Id ==id);
    Ответ написан
  • Что должен уметь Junior C# Web разработчик?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Уметь работать с asp net core.
    Написание нового контроллера не должно вызывать никаких сложностей.
    Должен знать про middleware и разные фильтры. Знать, какими сущностями в разные моменты времени обрабатывается запрос
    2. Знать как устроен HTTP хотябы на поверхностом уровне.
    Знать что в http-запросе есть заголовки и тело.
    3. Уметь работать с dotnet cli, если понадобится. Уметь вызывать dotnet build, dotnet watch, dotnet run, и dotnet publish
    4. Уметь искать нужные библиотеки в гугле и в нугете.
    5. Уметь работать с git хотябы на базовом уровне: git init, git branch, git add, git commit, git merge.
    Можно через GUI. Можно через встроенный плагин в IDE
    6. Уметь работать с какой-нибудь одной IDE на базовом уровне: с VS или с Rider.
    На базовом уровне - это значит, что ты можешь мышкой создать проект, добавить в него новые файлы, и запустить проект.
    7. Хотябы поверхностно знать про фронтенд. Чтобы мог загуглить и решить несложную задачу.
    8. Уметь работать с debugger-ом. Ставить точки останова, делать шаг вперёд, с заходом, с обходом.
    9. Уметь работать с какой-нибудь реляционной БД. Знать основы про всякие нормальные формы, уметь писать сырой sql запрос.
    10. Ну и кнонечно C#, ООП, всякие паттерны.
    Ответ написан
    7 комментариев
  • Стоит ли браться за изучение ML.NET?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Если интересно - можно попробовать.
    Правда лично мне она показалась слишком высокоуровневой и не очень гибкой.
    Нельзя самостоятельно выбрать количество слоёв.
    Нельзя обучать на видеокартах.
    Картинки на вход принимает только если они сохранены на диске - по пути.
    2. Можно питон. К WPF потом эту модель можно подключить через ml net.
    ML NET умеет работать с универсальным форматом onnx, так что ты можешь обучить нейросеть на питоне, а потом экспортировать её в onnx
    Вот пример использования onnx
    https://docs.microsoft.com/en-us/dotnet/machine-le...
    Ответ написан
    2 комментария
  • Статические массивы и шаблоны по числу в C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В C# нет const женериков.
    И нет массивов фиксированной, на этапе компиляции, длины.
    Как вариант -можешь делать stackalloc на вызывающей стороне и передавать Span в метод, чтобы его заполнить
    Ответ написан
    6 комментариев