Ответы пользователя по тегу C#
  • Существует ли аналог VisualStudio для Android?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Языки и технологии: C# WPF EntityFramework Windows

    С таким желаемым набором технологий единственный вариант - RDP к машине, где будет установлена студия.

    Если убрать Windows и WPF, а Entity Framework заменить на EF Core, то тогда можно попробовать Github Codespaces.
    Естественно, адекватно это можно будет использовать только на планшете с клавиатурой и мышью/трекпадом
    Ответ написан
    Комментировать
  • Почему не выполняется код из свойства?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    По вашему же коду Die должен срабатывать в ситуации, когда value <= 0 при выставлении значения.
    Тк тут float, то надеяться на строгое равенство нулю не следует.

    Сказать конкретнее нельзя, тк в примере кода не показано, как происходит обращение к свойству.
    Ответ написан
    Комментировать
  • Как расшифровать JSON Web Encryption?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вот в самом репозитории Jose есть пример использования x509:
    var payload = new Dictionary<string, object>()
    {
        { "sub", "mr.x@contoso.com" },
        { "exp", 1300819380 }
    };
    
    var privateKey=new X509Certificate2("my-key.p12", "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
    
    string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256);


    У X509Certificate2 есть метод с говорящим названием: CreateFromPemFile
    Ответ написан
    Комментировать
  • Ошибка CS0246 Не удалось найти тип или имя пространства имен "User" | Как решить?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    Что написано - в том и ошибка.
    Или using забыл, или, если у тебя User в другом проекте - забыл ссылку на этот проект сделать.
    Либо просто нет у тебя User и тебе его надо написать
    Ответ написан
    Комментировать
  • Какие есть хорошие курсы по С#(платные/бесплатные)?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Для начинающих - ulearn.me
    Для продолжающих - learn.microsoft.com и metanit

    А деньги лучше на что-нибудь материальное потратьте
    Ответ написан
    Комментировать
  • Почему возникает ошибка в NpgsqlConnectionStringBuilder?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Судя по стактрейсу - ты передал некорректный connection string.
    Где именно - хз, ты ты не скинул ссылку на конкретный файл и конкретную строку, где произошла ошибка.
    Даже стактрейс не полный.
    Ну и ошибку выдаёт не сваггер

    UPD: нашёл. Действительно в файле Class.cs, где у тебя фабрика объявлена, ты какую-то странную строку подключения передаёшь:
    using Microsoft.EntityFrameworkCore.Design;
    using Microsoft.EntityFrameworkCore;
    
    namespace WebApi.Data
    {
        public class ContextFactory : IDesignTimeDbContextFactory<WebApiContext>
        {
            public WebApiContext CreateDbContext(string[] args)
            {
                var optionsBuilder = new DbContextOptionsBuilder<WebApiContext>();
                optionsBuilder.UseNpgsql("Data Source=blog.db");
    
                return new WebApiContext(optionsBuilder.Options);
            }
        }
    }


    Да и вообще обращаться к этой фабрике ты не должен - она используется только для генерации миграций.
    Тебе следует доставать DbContext через DI, который ты сам же и настроил:
    builder.Services.AddDbContext<WebApiContext>(options =>
        options.UseNpgsql(builder.Configuration.GetConnectionString("WebApiContext") ?? throw new InvalidOperationException("Connection string 'WebApiContext' not found.")));
    Ответ написан
  • Как генерировать код в Visual Studio Code?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист

    Есть ли возможность разрабатывать свои подобные генераторы?

    Конечно есть. Это обычное консольное приложение, которое упаковано как dotnet global tool.

    А ещё есть source generators.

    А ещё можно писать шаблоны для dotnet new.

    Да и строго говоря T4 никуда не делись:
    https://github.com/mono/t4

    Даже в Rider не так давно завозили их поддержку.
    Ответ написан
    Комментировать
  • Как реализовать запрос для получения тела тикета с YouTrack сервера, чтобы использовать его в проекте WPF C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В документации даны примены с использованием curl:

    curl -X GET \
    'https://example.youtrack.cloud/api/issues?fields=id,summary,project(name)' \
    -H 'Accept: application/json' \
    -H 'Authorization: Bearer perm:amFuZS5kb2U=.UkVTVCBBUEk=.wcKuAok8cHmAtzjA6xlc4BrB4hleaX' \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json'


    Их можно по сути в лоб перевести в запросы с использованием HttpClient:
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    // Только для примера
    using var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Get, "https://example.youtrack.cloud/api/issues?fields=id,summary,project(name)")
    {
        Headers = {
            {"Accept", "application/json"},
            {"Authorization", "Bearer perm:amFuZS5kb2U=.UkVTVCBBUEk=.wcKuAok8cHmAtzjA6xlc4BrB4hleaX"},
            {"Cache-Control", "no-cache"}
        },
        Content = new StringContent("")
        {
            Headers = {
                ContentType = new MediaTypeHeaderValue("application/json")
            }
        }
    };
    
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    
    var responseBody = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine(responseBody);

    Ответ потом можно разобрать через System.Text.Json
    Ответ написан
    Комментировать
  • Что означают значения в фигурных скобках после названия поля?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Ответ написан
    Комментировать
  • Как запустить исполняемый файл на ubuntu?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. chmod +x "имя этого файла"
    2. ./имя этого файла
    sudo не нужно.
    Пробелы из названия лучше убрать.
    Ответ написан
    5 комментариев
  • Как исправить ошибку CS0115?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    В классе MonoBehaviour нет виртуальных методов OnPlayerLeftRoom и OnLeftRoom.
    Либо PL должен наследоваться не от него, либо ты куда-то не туда пишешь код.
    Ответ написан
    Комментировать
  • Что я сделал не так?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Ну так у тебя в коде прямо так и написано:
    if(rot >= 30)
            {
                odin *= -1;
            }

    Если предположить, что rot = 90, то при первом FixedUpdate он у тебя крутанётся до 88, тк rot >= 30.
    При следующем FixedUpdate, тк rot всё ещё >=30, у тебя "odin" будет инвертирован и крутанётся уже обратно до 90.
    Попробуй вот так:
    void FixedUpdate()
        {
            rotation = transform.eulerAngles;
            rot = Mathf.Abs(rotate - rotation.x);
            var dir = rot >= 30 ? -1 : 1; // Только для примера
            transform.eulerAngles += new Vector3(dir * 2, 0, 0);
        }

    + Лучше перейди на Update обычный.
    Ответ написан
    Комментировать
  • Как можно упростить реализацию работы с БД в C#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист

    однако в CRUD-функциях будут разные SQL-запросы

    Вынеси код со всеми CRUD-операциями в отдельный класс с интерфейсом. Передавай экземпляр этого класса в форму.

    Сами формы можно в рантайме через рефлексию попробовать генерировать.
    Ответ написан
    Комментировать
  • Ошибка в ChatMemberAdministrator. Как исправить?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    У метода PromoteChatMemberAsync нет такой перегрузки, какую ты пытаешься использовать.
    Ответ написан
    2 комментария
  • Как правильно называется this в сигнатуре статичного метода?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    extension-method.
    А по русски: метод-расширение
    https://learn.microsoft.com/ru-ru/dotnet/csharp/pr...
    Ответ написан
    1 комментарий
  • Куда расти дальше?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист

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

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

    Самый главный навык, который тебе нужно получить, - это навык самостоятельного поиска информации, тк в реальном мире не факт, что у тебя рядом будет опытный ментор, который даст всё в разжеванном виде
    Ответ написан
    Комментировать
  • Почему консольное приложение С# созданое в VS Code выглядит нестандартно?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Из-за того что модератор вполне оправданно удалил скриншоты - предположу, что там был вот такой код:
    Console.WriteLine("Hello World!");
    А в большинстве руководств ты видишь примерно такой код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace MyApp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
    }

    VS Code тут ни при чём.
    У тебя всего одна строчка кода и она при этом работает благодаря двум фичам, которые ввели в C# 9 и 10:
    1. Top-level statements - позволяет не объявлять класс со статичным методом Main - вместо этого в одном любом из файлов можно сразу начать писать код для выполнения и компилятор будет считать код в этом файле за точку входа
    https://learn.microsoft.com/en-us/dotnet/csharp/fu...
    2. Global Using Directive - можно написать global using Namespace; и этот неймспейс будет неявно подключен ко всем файлам в проекте. Также можно написать <Using Include="Namespace" /> в csproj-файле для аналогичного эффекта. Некоторое количество таких глобальных включений уже настроено по-умолчанию на уровне SDK.
    https://learn.microsoft.com/en-us/dotnet/csharp/la...

    Соответственно в .NET 7 переделали шаблон на именно такой, чтобы упростить вход для новичков и приучить к новому стилю.
    В других источниках ты видишь другой код, тк в тех источниках он был написан до выхода .NET 7.

    Старый синтаксис никто не убирал - он всё ещё работает, если тебе очень нужно, но вот шаблон придётся установить отдельно, если ты хочешь, чтобы новые проекты создавались со старым синтаксисом.
    (Но уверяю тебя - тебе это не нужно)
    Ответ написан
    Комментировать
  • Имеет ли смысл использовать здесь using для освобождения ресурсов?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    У тебя в таком коде форма будет уничтожена сразу после выхода из метода ShowDataRecordForm.
    Ты даже не успеешь форму закрыть
    Ответ написан
  • Ошибка в методе GetChatMemberAsync(chatId). Как исправить?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Кроме chatId тебе нужно в этот метод передать userId.

    Ты в коде почему-то предполагаешь, что метод GetChatMember вернёт всех членов чата, если не передать ему userId - это не так.
    Этот метод всегда возвращает одного члена.
    Ответ написан
  • Как в C# проекте импортировать стороннюю c++ библиотеку?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вариант "идеоматичный":
    1. Эта библиотека должна экспортировать функции с сишным abi (extern "C")
    2. В коде на C# ты описываешь эти функции при помощи pinvoke
    3. Добавляешь в проект dll-ку с собранной сторонней либой.
    Профит

    Вариант "ситуативный и будет работать только на винде":
    1. Берёшь C++/CLI
    2. Делаешь на нём .Net библиотеку и делаешь нужное количество классов -обёрток над плюсовым кодом.
    Профит

    В случае с этой библиотекой можно ещё попробовать:
    1. Найти альтернативы
    2. Переписать на C#
    Ответ написан
    2 комментария