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

    1. У тебя json выглядит так:
    - cars
      - cars_bigs
        - force: 500
          weight: 1000
        - force: 1000
          weight: 4000
      - cars_smaller
        # и так далее

    Значит тебе объекты нужны такие:
    class CarsResult {
      public CarItem[] Cars { get; set; }
    }
    class CarItem {
      // К сожалению, нельзя на уровне системы типов выразить "Объект, у которого есть либо поле А либо поле Б"
      // Так что придётся указать оба поля
     // И нельзя это разрулить на уровне настроек сериализатора, если не придумывать кастомный сериализатор (не знаю, можно ли кастомизировать юнитивский)
      public Car[] BigCars { get; set; }
      public Car[] SmallCars { get; set; }
    }
    class Car {
      public int Force { get; set; }
      public int Weight { get; set; }
    }

    PS: В английском языке прилагательные ставятся перед существительными и не имеют числа. Так что "большие машины" - это "big cars", но никак не "Cars bigs". А "машины по меньше" - это "Smaller cars"
    PPS: Надеюсь, как указать нужные имена ты сам догадаешься, почитав документацию..
    Ответ написан
    2 комментария
  • Как сделать статический класс конфигурации в Asp.Net Core 6?

    Делаешь нестатическую конфигурацию, а потом, во время инициализации кладёшь экземпляр конфига в public static cвойство.

    В .NET 6 это можно сделать примерно так:
    var builder = WebApplication.CreateBuilder(args);
    var app = builder.Build();
    GlobalConfig.Instance = app.Configuration;
    
    app.MapGet("/", () => $"I can use configuration w/o DI! AllowedHosts={GlobalConfig.Instance.GetValue<string>("AllowedHosts")}");
    
    app.Run();
    
    public static class GlobalConfig
    {
        public static IConfiguration Instance { get; set; }
    }

    Но лучше не надо)
    Ответ написан
  • Что такое this[...] в C#?

    Это Индексатор
    https://docs.microsoft.com/en-us/dotnet/csharp/pro...

    По смыслу - функция, которая от key (который object) возвращает какой-то VkResponse.

    Синтаксически, вызов индексатора выглядит как обращение по индексу в массиве (с квадратными скобками)
    Ответ написан
    Комментировать
  • Почему массив работает как словарь?

    Значит ArrayClassTest[0] и ArrayClassTest[1] - это один и тот же объект.
    Создавай два разных объекта через new и проблемы не будет.
    Ответ написан
    Комментировать
  • Как извлечь из байтов данные на C#?

    Делаешь File.Open - ты получишь Stream, с помощью которого ты можешь считывать данные из файла.
    Там есть метод ReadAsync, в который можно передать некоторый буфер, чтобы заполнить его данными.
    Твоя задача - написать машину состояний (гугли) для каждого из твоих префиксов и побайтово читать файл.

    Для чуть большего удобства и эффективности можешь воспользоваться System.IO.Pipelines (гугли) и System.Threading.Channels

    Если очень интересно, могу скинуть ссылку на свой репозиторий, где с их помощью разбираются бинарные данные, которые передаются по сети
    Ответ написан
  • Как исправить ошибку "To run this application, you must install .NET Core"?

    Есть несколько вариантов:
    1. Использовать .net 6 - он умеет тащить за собой не весь рантайм, а только то что нужно для работы.
    По крайней мере Hello World в 12мб получалось уместить (single file + self contained + assembly trimming)
    2. Поставлять программу вместе со скриптом, который проверит, установлен ли .net runtime и установит его сам, скачав из интернета
    3. Забить и оставить как есть (засунуть в архив)
    4. Использовать .NET Framework, который идёт на винде из коробки, но имхо - это шаг назад по всем параметрам, и так делать не стоит.

    UPD: Hello world таки весит 12 мегабайт
    Ответ написан
    6 комментариев
  • C# 10. Как отказаться от программы верхнего уровня?

    Ну вообще это удобно. и я не вижу каких-то причин. чтобы писать по старому.
    Но если очень сильно хочется - ты можешь создать свой собственный шаблон, в котором будет создаваться старый public static void Main и без неявных юзингов.

    Вот так выключаются global usings:
    <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
            <TargetFramework>net6.0</TargetFramework>
            <Nullable>enable</Nullable>
            <ImplicitUsings>disable</ImplicitUsings>
        </PropertyGroup>
    </Project>

    Вот так создавать свой шаблон:
    https://docs.microsoft.com/ru-ru/dotnet/core/tools...
    Ответ написан
    3 комментария
  • Какую книгу выбрать для ASP NET CORE 6?

    У aspnet core новая версия выходит каждый год, так что физически нереально выпустить хорошую книгу за это время.

    Из принципиально новых вещей, по сравнению с прошлыми версиями, у asp net core 6 - это Minimal API, описание которого умещается в одной статье в документации.
    В остальном, со времён net core 2.0 ничего сильно не изменилось (конечно, Startup менялся, но о том как корректно конфигурировать ты можешь прочесть в документации)

    Так что советую книгу "asp net core in action" и "asp net core 5 for beginners".
    Ну и метанит - вот на нём постоянно выходят обновления.
    Ответ написан
    1 комментарий
  • Для чего свойство класса создается в другом классе?

    Почему экземпляр класса company создаётся в конструкторе класса Person - из-за того что писавшему пример лень было показать что-то более приближенное к реальности (в реальности так писать обычно не следует).

    Почему класс Person содержит поле типа Company - потому что автору так понадобилось.
    Почему нет?
    Ответ написан
    2 комментария
  • Как используется C# на КЕГЭ 2022?

    Раз в спецификации сказано, что можно - значит можно.
    На всякий случай, лучше не используй слишком новых фич (Ориентируйся на C# 7, ибо почти наверняка они будут использовать mono), не используй сторонних библиотек (ибо интернета не будет), и не надейся на какие-то платформозависимые штуки (ибо не обязательно Windows будет стоять)

    Хотя на всякий случай лучше быть готовым к худшему - что на конкретном пункте сдачи будет установлен какой-нибудь Visual Studio 2008 Express

    UPD1: Написал в ФИПИ вопрос. Обновлю ответ когда ответят.
    UPD2: Ответ пришёл:
    Здравствуйте, Василий!



    1. Согласно спецификации ЕГЭ по информатике 2022 г. " В КИМ заданиями повышенного и высокого уровней сложности проверяется достижение следующих предметных результатов освоения основной образовательной программы на профильном уровне: …владение универсальным языком программирования высокого уровня (одним из нижеследующих: Школьный алгоритмический язык, С#, C++, Pascal, Java, Python), представлениями о базовых типах данных и структурах данных; умение использовать основные управляющие конструкции..."

    2. Примеров кода на C#, равно как и на языке Java, не будет. Как правило, программистам на языке C# однозначно понятен код с использованием основных управляющих конструкций, написанный на языке С++.

    3. Перечень стандартного ПО формируется органами исполнительной власти субъекта Российской Федерации с учетом информации, полученной от образовательных организаций, расположенных на территории субъекта Российской Федерации, об используемом в ходе образовательного процесса стандартном ПО, и информации, полученной от участников экзаменов.



    С уважением, специалисты ФГБНУ "ФИПИ"

    Мой вопрос


    Здравствуйте, увидел что в актуальной спецификации ЕГЭ по информатике указано, что при решении задач можно использовать язык C#.

    Однако в демонстрационном варианте примеры кода были даны только на C++, Python, АЯ, и Pascal (задание 6 и 22).


    И у меня возникли вопросы:

    1. На ЕГЭ 2022 действительно можно будет использовать C#?

    2. Если да, то будут ли в задании 6 и 22 примеры кода на C#, как это сделано с остальными языками?

    3. Какая версия языка и среды выполнения будут доступны на компьютерах? Есть ли какие-нибудь рекомендации по этому поводу?




    В общем на экзамене действительно можно будет использовать C#, но конкретные версии зависят исключительно от местного управления, а его решение зависит, видимо, от того что используют в местных школах.
    Так что вопрос надо задавать либо твоей школе, либо местному управлению образованием.
    Ну и ещё вроде как должны учитывать то, какое ПО хотят сами экзаменуемые использовать
    Ответ написан
  • Можно ли импортировать скрипты или компилировать их в процессе выполнения?

    Ответ Ukrainskiy Немного устаревший, и в новых версиях работать не будет.
    Сейчас следует использовать Microsoft.CodeAnalysis.CSharp.Scripting
    Примерно так:
    using Microsoft.CodeAnalysis.CSharp.Scripting;
    using Microsoft.CodeAnalysis.Scripting;
    
    var script = CSharpScript.Create("System.Console.WriteLine(\"Hello from script\")");
    script.Compile();
    await script.RunAsync();


    Также, если под "скриптами" имеются в виду классы для Unity, то можно их скомпилировать отдельно в Dll и импортировать через Assembly.Load, а потом вызывать через рефлексию.
    Ответ написан
  • Можно ли написать функцию, которая меняет значение таблицы автоматически в зависимости от времени?

    Записывай время, когда номер был зарезервирован.
    Затем периодически (через cron, HostedService, Quartz, Hangfire, хранимые процедуры с триггерами, Task Scheduler или как-либо ещё) делай запрос наподобие
    UPDATE bookings WHERE status IS 'ACTIVE' AND add(reservation_date, '<тут твой срок>') > now() AND guest_visited IS FALSE SET status = 'INACTIVE';
    .
    Ответ написан
    Комментировать
  • Падает программа при вызове PInvoke?

    Ну как минимум ты на стороне C++ вполне чётко написал, что calling convention - cdecl, а на C# почему-то написал stdcall.
    Попробуй вот так:
    [DllImport("C:\\CMakeProject2.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "test")]
        [SuppressUnmanagedCodeSecurity]
        private static extern void Test();

    Ну и библиотеки лучше таки именно в библиотеки собирать, а не в екзешники, и ложить рядом с твоим приложением, а не где-то в глобальной папке.
    Ответ написан
    3 комментария
  • Что делать с ошибкой CS1061 на Unity?

    1. Научись задавать вопросы. Если отвечать на вопрос из заголовка, то ответ будет "Делай что хочешь, можешь оставить как есть и любоваться ею"
    2. Научись читать правила и оформлять посты в соответствии с ними.
    Вот где тут например язык D? Я вот чётко вижу что тут C# с юнити. Ещё и оформления нет.

    У RigidBody нет метода addForce.
    Список всех доступных методов тут: https://docs.unity3d.com/ScriptReference/Rigidbody.html
    Ответ написан
    Комментировать
  • Какой курс выбрать для изучения C#?

    Посмотри в сторону ulearn.
    Он бесплатный и периодически обновляется (текстовая часть).
    Ответ написан
    Комментировать
  • Как исправить ошибку CS1001?

    Учись составлять вопрос)
    Если отвечать на вопрос из заголовка
    У меня ошибка CS1001?

    То да.
    А если конкретно, то вот тут точки убрать надо
    private Rigidbody2D ..rigidbody;
    Ответ написан
    Комментировать
  • Что такое Duck typing и когда мы можем пройтись по собственной коллекции foreach- ом?

    Я так понимаю, вопрос про то, что для прохода по коллекции через foreach совершенно не обязательно реализовывать IEnumerable - достаточно написать пару методов:
    public class MyEnumerable {
      public MyEnumerator GetEnumerator() => new MyEnumerator();
    }
    public class MyEnumerator {
      // Этот метод должен переходить к следующему элементу, и возвращать true, если переход произошёл,
      // и false, если дальше элементов нет
      public bool MoveNext() => false;
    
      // Это свойство должно возвращать текущий элемент
      public int Current => 0;
    }


    Тогда можно будет засунуть это в форич:
    foreach(int x in new MyEnumerable()) {
      Console.WriteLine(x); // вообще-то мы сюда не попадём, тк Next всегда возвращает false, но синтаксической ошибки нет.
    }

    Изначально это было придумано для того, чтобы не вызывать лишний боксинг элементов при итерации по массивам, тк изначально в С# не было обобщений => не было обобщённого IEnumerable<T>
    Но сейчас этим имеет смысл пользоваться только тогда, когда ты хочешь проитерироваться по ref struct, тк они не могут реализовывать интерфейсы.
    Ответ написан
    9 комментариев
  • Русский текст, набранный английскими буквами на c#?

    С учётом того что кодировки и раскладки клавиатур бывают разные - проще всего сделать через dictionary.
    И нет, с помощью ascii нельзя, даже если предположить что используется 1251 и какая-нибудь типичная раскладка
    Ответ написан
    1 комментарий
  • Как быстро определить ОС (Windows/Linux) при кроссплатформенной разработке на С# .Net 5/6?

    А еще лучше, если есть, какие-то директивы предпроцессора, что бы определение ОС не фигурировало в коде?

    Директивы препроцессора на то и препроцессора, что они только при компиляции проверяются, но можно.
    Вариант раз - RuntimeIdentifier
    Вариант два - объявить своё свойство.

    Если динамически в коде, то можно через OperatingSystem.IsLinux()
    Или через System.Runtime.InteropServices.RuntimeInformation.IsOsPlatform
    Ответ написан