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

    Каждый тик таймера вы устанавливаете определённое значение переменной.
    В вашем случае нужно где-то сохранять данные об оставшемся количестве.
    Предлагаю вам завести класс, который хранит количество всего и поместить их в словарь.
    Будет что-то наподобие
    private Dictionary<string, Item> Inventory = new () {
        ["Дробовик"] = new () { Damage = 36, Clip = 30, Stock = 60 },
        ["Автомат"] = new () { Damage = 30, Clip = 30, Stock = 60 },
        ["Базука"] = new () { Damage = 51, Clip = 1, Stock = 2 }
    };
    public Item SelectedItem {get; set;}
    private void timer1_Tick(object sender, EventArgs e) {
      SelectedItem = Inventory[combobox.Text];
    }

    А потом там где вы выводите текст:
    label1.Text = SelectedItem?.Clip.ToString() ?? "";
    Ответ написан
    Комментировать
  • Как защититься от SQL инъекции в asp.net core? правильно ли я пишу?

    Сначала по пунктам, как ты делаешь:
    1. Кривое именование. Dapper позволяет маппить имена колонок к именам свойств.
    2. Похоже на ок, но стоит разбить интерфейс. Тк, скорее всего, не для всех сущностей будут нужны все эти методы.
    Именование не ок.
    dbConnection стоит переиспользовать.
    dbConnection.Dispose руками писать не нужно, тк dbConnection и так завёрнут в using
    SELECT * лучше не использовать
    Правильно ли я делаю?

    Не совсем

    Нет ли ошибок?

    Есть

    Как можно защититься от инъекции?

    Валидировать ввод.
    Не уверен, проверяет ли даппер сам параметры, но вы используете параметризованные запросы - так что должно быть ок.
    Если что - можете сами попытаться провести инъекцию (сами состаьте запрос или через burp suite)

    Например, в php экранировали вводимую пользователем форму например htmlspecialchars, надо ли на net core так же делать?

    Dapper сам должен это делать.
    Ответ написан
    Комментировать
  • Как сделать ссылку на проект?

    Ссылку на проект - это в csproj надо написать
    <ItemGroup>
      <ProjectReference Include="../OtherProject/OtherProject.csproj"/>
    </ItemGroup>

    А то что "Ссылки: 0" - это то, в каких местах идёт явное обращение к подсвеченному методу.
    Ответ написан
    Комментировать
  • Как подавить автогенерацию метода ToString у record в c#?

    В record'е можно реализовать ToString явно - тогда не сгенерируется его дефолтная версия.
    Или можно тупо не использовать рекорды

    UPD: Поэкспериментировал с рекордами и вот вывод:
    1.
    sealed override string ToString()
    Так можно делать только в sealed record
    2. Рекорд не наследует ToString от родителя - вместо этого он определяет свой собственный
    3. В рекоде можно спокойно переопределить ToString
    Если вы не хотите переопределять ToString во всех рекордах, то, возможно, вам нужны не рекорды, а обычные классы.
    Ответ написан
    2 комментария
  • Как из inputField получить int?

    InputField input = ...;
    int number = int.Parse(input.text); // если в input.text будет лежать не число, то будет FormatException

    либо

    InputField input = ...;
    if(int.TryParse(input.text, out var number) {
      // используем number. В этом случае FormatException не выпадет, но тогда будет возникать ощущение, будто ничего не работает.
    }
    Ответ написан
  • Как решить ошибку FormatException: Input string was not in a correct format. unity?

    str = int.Parse(inf_ot.text);
    str2= int.Parse(inf_do.text);

    У вас в inf_ot и ind_do не числа.
    Приведите пример текста, который хотите спарсить.

    PS: Но вообще код какой-то дикий. Я советую вам отложить юнити на потом и пока учить чистый C#.
    Замечания по коду

    public void Random()
    {
        str += str2 = otv; // Не будет работать, либо будет работать не так, как вам нужно.
    }

    R_Main - какое-то дикое сокращение, которое ничего не говорит о смысле скрипта. + В C# принято использовать PascalCase - никаких нижних чёрточек
    inf_ot, inf_do - То же самое, но ещё и транслит "от" "до"
    otvet - то же самое
    int str, str1 - лишнее сокращение + обман читателя. str большинство людей расшифровывают, как string, но тут числа
    otv - сокращение + транслит.
    Ну и парсинг чисел в апдейте - это жирноватая операция.

    PPS: вероятно, вам нужно это:

    Валидация - сюда можно ввести код, который не позволит пользователю вводит не-числа:
    https://docs.unity3d.com/ru/530/ScriptReference/UI...

    Событие ввода - чтобы не проверять текст каждый кадр:
    https://docs.unity3d.com/ru/530/ScriptReference/UI...

    Не забывайте про документацию - в ней хорошо описаны самые нужные моменты.
    Ответ написан
    Комментировать
  • Как вызвать метод на блейзор клиенте?

    Ошибка говорит, что HttpClient в блазоре не поддерживает Proxy
    А в коде вашей либы есть такой код
    public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
            {
                BaseUrl = baseUrl;
                Serializer = serializer;
                DefaultQueryString = new List<KeyValuePair<string, string>>();
    
                MaxRetryCount = 0;
                Proxy = proxy;
    
                HttpClient = new HttpClient(new HttpClientHandler
                {
                    Proxy = proxy // Вот из-за этой строчки происходит падение.
                });
            }


    Есть три варианта решения:
    1. Сделать форк либы и поправить эту строку.
    Но не факт, что это единственная строчка, которая вызывает несовместимые API
    2. Вызывать этот код на сервере, а клиенту передавать только данные.
    3. Написать собственный клиент для imdb
    Ответ написан
    Комментировать
  • Нужно ли вызывать Dispose у Bitmap?

    Dispose нужно вызывать всегда, когда вы прекращаете пользоваться ресурсом.
    В вашем случае битмапом владеет Holder, по тому Holder нужно сделать IDisposable и вызывать Dispose на нём при завершении работы программы.
    Если жизненным циклом битмапа управляет не Holder, то Holder не нужно делать IDisposable, но перед тем как избавиться от Bitmap - на нём надо вызвать Dispose, иначе произойдёт утечка памяти или ещё чего (не уверен, что там внутри битмапа хранится и какие там ограничения)
    Ответ написан
    3 комментария
  • Произошла проблема в Unity, поможете?

    У объекта класса RigidBody нет поля velosity - об этом тебе Unity говорит.
    Идём в документацию и видим, что есть поле velocity - ты опечатался.

    Раз у тебя возникают трудности в таких моментах, от забудь про существование юнити и займись просто C#-ом
    Ответ написан
    Комментировать
  • Как обновить данные в SQlite3 используя C#?

    UPDATE пишется по другому:
    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    Ответ написан
    6 комментариев
  • Как правильно обработать исключение?

    Что-то заорал с этого кода:
    SQLiteCommand cmd = new SQLiteCommand($"SELECT Name FROM users WHERE Login = '{LoginField.Text}'", load);
                SQLiteCommand comand = new SQLiteCommand($"SELECT Surname FROM users WHERE Login = '{LoginField.Text}'", load);
                SQLiteCommand command = new SQLiteCommand($"SELECT Image FROM users WHERE Login = '{LoginField.Text}'", load);
                SQLiteDataReader Reader = cmd.ExecuteReader();
                SQLiteDataReader Readr = comand.ExecuteReader();
                SQLiteDataReader reader = command.ExecuteReader();

    И у вас не возникло ощущение, что вы что-то делаете не так и люди не пишет Reader,Readr, reader, cmd, command?
    В вашем случае нужно писать что-то типа этого:
    using System;
    using System.Data;
    using System.Data.SQLite;
    
    using var connection = new SQLiteConnection("Data source = accounts.db");
    connection.Open();
    using var cmd = new SQLiteCommand("SELECT Name, Surname, Image FROM users WHERE Login = @Login", connection)
    {
    	// Параметры используются, чтобы защититься от SQL-инъекций
    	Parameters =
    	{
    		new SQLiteParameter("@Login", "test") // то значение, которое должно быть подставлено вместо @Login
    	}
    };
    using var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
    var name = reader.GetString("Name");
    var surname = reader.GetString("Surname");
    var image = reader.IsDBNull("Image")
    	? null
    	: Convert.FromBase64String(reader.GetString("Image"));
    connection.Close();
    // Делаем с name, surname и image что хотим

    Ещё я советую использовать async-await, чтобы интерфейс программы не зависал, пока запрос выполняется.
    Ответ написан
    Комментировать
  • Как с помощью программы на С# подписываться в тик токе?

    Берёте playwright/puppetter/selenium и автоматизируете с помощью него действия в браузере.
    В теории, можно посмотреть, какие запросы отправляет браузер при входе и подписке, и отправлять их вместо него
    Ответ написан
    Комментировать
  • Как сделать так чтобы можно было переключать языки с помощью кнопки?

    Можно сделать кнопку-ссылку, которая будет открывать нужную страницу.
    При этом все ссылки на сайте нужно генерировать динамически, чтобы везде стоял правильный язык.
    Вообще, культуру как-то можно указать через параметры пути, вместо query - такие ссылки чисто визуально выглядят лучше
    Ответ написан
    Комментировать
  • Как бы разложить по полочкам выражение с тернарными операторами(пример ниже)?

    Форматирование решает:
    int x, y;
    var quadrant = x > 0 
      ? y > 0
        ? "I"
        : "IV"
      : y > 0
        ? "II"
        : "III"

    Но вообще лучше использовать switch expression:
    int x, y;
    var quadrant = (x, y) switch {
      (>0, >0) => "I",
      (>0, <0) => "IV",
      (<0, >0) => "II",
      (<0, <0) => "III",
      _ => "Точка находится на одной из осей"
    }

    Чтобы использовать switch-expression, нужно обновиться до .NET 5 и C#, что я вам очень советую.
    А ещё стоит объединить X и Y в структуру Point - кажется в BCL уже есть такая
    Ответ написан
  • Error CS0201. Как решить проблему?

    https://docs.microsoft.com/ru-ru/dotnet/csharp/lan...
    Номер строки вам должен быть уже известен
    Ответ написан
    Комментировать
  • Как воспроизвести звук в Windows forms?

    https://docs.microsoft.com/ru-ru/dotnet/desktop/wi...
    А чтобы было циклично - ждёшь, когда закончится воспроизведение старого звука и сразу начинаешь его воспроизводить с начала.
    Ответ написан
    Комментировать
  • Что может C# для веб-приложения?

    Мне интересно в чем различие бэка на C# и Node js.

    1. C# строго типизированный и компилируемый - от этого он быстрее и лучше поддерживается средами разработки.
    2. В C# Много прикольных фич- например LINQ
    3. .NET многопоточный (при этом может работать и асинхронно), а nodejs работает в одном потоке только асинхронно (в основном)
    4. ASP NET Core быстрее, чем любой бэкенд фреймворк для nodejs
    5. На nodejs очень быстро можно написать прототип
    6. Nodejs может выполнять тот код, который выполняется на фронтенде - это свойство полезно для SEO-оптимизации.
    7. На C# обычно легче поддерживать, чем js

    И C# сейчас для Web'a уместен ли вообще?

    Вполне, но надо конкретные случаи рассматривать.
    Если нужно очень быстро написать несложный бэкенд - nodejs отлично решит эту задачу
    Ответ написан
    Комментировать
  • Как присвоить переменным значения из одной строки C#?

    У вас память тратится на:
    1. Изначальную строку
    2. Массив для строк после разделения
    3. Производные строки
    4. Делегат для select
    5. Итератор внутри select
    6. Аллокакция нового массива в ToArray

    Если совсем время не жалко, то можно поработать с оригинальной строкой через Span<char> - тогда, в теории, можно написать код без аллокаций вообще.
    Но лично я бы этим не заморачивался, если этот код не является горячим местом
    Ответ написан
    Комментировать
  • Как исправить ошибку System.Data.SQLite.SQLiteException: "SQL logic error near "(": syntax error"?

    У вас неправильный синтаксис запроса.
    UPDATE пишется так:
    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    Ответ написан
    Комментировать