Что делать если говорят что операнды / и * не поддерживаются в типе данных 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 шт):
Convert.ToInt32(b);
Это функция, её результат должен быть присвоен целочисленной переменной
Console.WriteLine($"Ответ: {Convert.ToInt32(a) + Convert.ToInt32(b)}");
И подобным образом для остальных операций.
Ну, ещё и я напишу свой ответ.
В C# все переменные и константы не могут менять свой тип данных после их объявления. По этой причине (и, возможно, ещё парочке других) все преобразования и приведения типов сводятся к созданию новой переменной на основе значения "старой" и возврату этой новой переменной.
Метод Convert.ToInt32(...); принимает как аргумент строку, создаёт на основе неё число и возвращет его как результат. Переданная строка не превращается в число!
Вы можете сохранить значение, возвращенное методом, в переменную, чтобы использовать его в дальнейшем:
string aString = "1";
int aNumber = Convert.ToInt32(number1String); // строка осталось строкой; aNumber = 1
Есть так же вариант с 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("Введите корректное число!");
}
Будет полезно читать: это