Что делать если говорят что операнды / и * не поддерживаются в типе данных String, хотя я их перевёл в int? (C#)

Код:

using System;

class Program {
    public static void Main(string[] args) {
        Console.WriteLine("Выберите действие (+ - * /)");
        string act;
        act = Console.ReadLine();
        Console.WriteLine("Введите первое число:");
        string a;
        a = Console.ReadLine();
        Convert.ToInt32(a);
        Console.WriteLine("Введите второе число:");
        string b;
        b = Console.ReadLine();
        Convert.ToInt32(b);
        if (act == "+") {
            Console.WriteLine($"Ответ: {a + b}");
        } else if (act == "-") {
            Console.WriteLine($"Ответ: {a - b}");
        } else if (act == "*") {
            Console.WriteLine($"Ответ: {a * b}");
        } else if (act == "/") {
            Console.WriteLine($"Ответ: {a / b}");
        } else {
            Console.WriteLine("Действие выбрано неверно");
        }
    }
}

Ошибка:

main.cs(21,48): error CS0019: Operator `*' cannot be applied to operands of type `string' and `string'
main.cs(23,48): error CS0019: Operator `/' cannot be applied to operands of type `string' and `string'
Compilation failed: 3 error(s), 0 warnings

Я перевёл переменные a и b в Int, (Convert.ToInt32(a), Convert.ToInt32(b)), но не работает, все равно программа думает что я работаю со строкой. Что делать?


Ответы (4 шт):

Автор решения: MBo
Convert.ToInt32(b);

Это функция, её результат должен быть присвоен целочисленной переменной

→ Ссылка
Автор решения: Blackmeser
Console.WriteLine($"Ответ: {Convert.ToInt32(a) + Convert.ToInt32(b)}");  

И подобным образом для остальных операций.

→ Ссылка
Автор решения: KuzCode

Ну, ещё и я напишу свой ответ.

В C# все переменные и константы не могут менять свой тип данных после их объявления. По этой причине (и, возможно, ещё парочке других) все преобразования и приведения типов сводятся к созданию новой переменной на основе значения "старой" и возврату этой новой переменной.

Метод Convert.ToInt32(...); принимает как аргумент строку, создаёт на основе неё число и возвращет его как результат. Переданная строка не превращается в число!

Вы можете сохранить значение, возвращенное методом, в переменную, чтобы использовать его в дальнейшем:

string aString = "1";
int aNumber    = Convert.ToInt32(number1String); // строка осталось строкой; aNumber = 1
→ Ссылка
Автор решения: MRamsey

Есть так же вариант с parse:

int num = int.Parse("5"); // 5

Однако, что int.Parse, что методы класса Convert при неудачной конвертации выбрасывают исключение (убивают приложение, Convert.ToInt32("Hello")), ловить их можно только через try..catch. Для таких случаев есть вариант получше - int.TryParse. Первым параметром принимает строку, которую нужно конвертировать, а вторым - переменную (с out), где нужно сохранить значение, если все пройдет удачно. А сама она возвращает true/false (удалась/не удалась конвертация)

string input = Console.ReadLine();
if (int.TryParse(input, out int num)) 
{
    Console.WriteLine($"Ответ: {num * 2}");
}
else 
{
    Console.WriteLine("Введите корректное число!");
}

Будет полезно читать: это

→ Ссылка