Ответы пользователя по тегу C#
  • Не работает скрипт, в чем проблема?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    У тебя в коде есть вот такие строчки:
    rb.velocity = new Vector2(-deltaPosX * Time.deltaTime * 100, 0);
    rb.velocity = new Vector3(0, 0, speddZ * Time.deltaTime);

    Так что проблема может быть в них:
    1. Ты в пределах одного кадра дважды меняешь скорость - по факту первая строка даже не будет отрабатывать
    А вторая строка будет уводить персонажа вдоль оси forward/backward (z), что достаточно странно для 2д игры.
    2. Если пальцем не двигать, то скорость будет 0, тк ты берёшь deltaPosition
    3. Скорость зачем-то привязана ко времени кадра. Чем выше будет fps, тем медленнее будет двигаться персонаж.
    (может вместо скорости ты хотел менять ускорение / импульс?)
    Ответ написан
    Комментировать
  • Как в NameValueCollection добавить bool параметр?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Используй Dictionary<string, T>
    Ну или пиши так:
    var pars = new NameValueCollection();
    pars.Add("название параметра", true.ToString());
    Ответ написан
  • Как редактировать иерархию файлов?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Если речь про .net Core, то никак (на счёт .net fw почти уверен, что аналогично)
    Все зависимости кладутся в ту же папку, куда и исполняемый файл.
    Если бесит большое количество файлов библиотек в папке с екзешником - используй single file app:
    https://docs.microsoft.com/en-us/dotnet/core/deplo...
    Ответ написан
    Комментировать
  • Как округлить значение?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Берёшь и округляешь каждый отдельный компонент через Math.Round
    Ответ написан
    Комментировать
  • Есть ли разница между 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 Куратор тега C#
    Токсичный шарпист
    У тебя уже есть UseStaticFiles, так что должно работать.
    "страничка на реакте" запускается в браузере, так что от сервера необходимо только раздать файлы.
    https://docs.microsoft.com/en-us/aspnet/core/funda...
    Зачем JsEngineSwitcher и AddReact хз. Можно же просто на стороне IIS статику раздавать, не напрягая бэкенд (а можно вообще без IIS жить - нафига платить кучу денег на лицензию винды nginx)
    Ответ написан
    4 комментария
  • Как записать это на C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Да, либо список из Dictionary<string, object>, либо список из объектов.
    Можно список из анонимных объектов, например так:
    var data = new [] { // это будет массив из анонимных типов
      new { bill = "123123", amount = 3.25 },
      new { bill = "123231", amount = 5.00 }
    };
    Ответ написан
    2 комментария
  • Текущая ситуация у C# с машинным обучением (проблемы и сложности)?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Какие библиотеки используете/использовать под C#?

    ML NET, Tensorflow net
    Какова ситуация с обучением на GPU?

    Вроде Tensorflow net умеет
    Производительность?

    Вроде ок
    Ваш ответ, что "не так", и вообще любому мнению буду рад.

    Лично меня не устраивает в ml net, что он не позволяет руками спроектировать NS - он сам решает, какая будет архитектура нейросети, по входным данным.
    Ещё не нравится, что картинку можно на вход подать только в качестве пути к файлу.
    Ответ написан
    Комментировать
  • Почему 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 Куратор тега C#
    Токсичный шарпист
    В MVC нельзя использовать элементы из WebForms.
    Вот что следует использовать вместо них:
    https://qna.habr.com/q/1079220

    Ну или если у вас есть возможность использовать .net6 - посмотрите на Blazor.
    Ответ написан
    Комментировать