Скажем, например, через консоль человек вводит числа. Вводит он всегда строки, даже если ввёл, скажем, число 12. Для начала, чтобы было понятнее, приведу пример:
[code]
Console.WriteLine("Введите 1 число");
string s1 = Console.ReadLine(); //Например, вы ввели '11'
Console.WriteLine("Введите 2 число");
string s2 = Console.ReadLine(); //Например, вы ввели '7'
Console.WriteLine(s1 + s2); //Результат: 117
Console.ReadKey();
[/code]
И при попытке сложить 2 числа (скажем, ввели 11 и 7) мы получим не 18, а 117!
Введите 1 число
11
Введите 2 число
7
117
Дело в том, что компьютер 11 и 7 воспринимает как строки и просто ставит их рядом. Вот и получается 117.
[code]
string s = "10"; //Это строка
int s = 10; //Это число
[/code]
Для этого нам надо извлечь
числа из строк:
[code]
Console.WriteLine("Введите 1 число");
string s1 = Console.ReadLine(); //Например, вы ввели '11'
int n1 = int.Parse(s1);
Console.WriteLine("Введите 2 число");
string s2 = Console.ReadLine(); //Например, вы ввели '7'
int n2 = int.Parse(s2);
Console.WriteLine(n1 + n2); //Результат: 18
Console.ReadKey();
[/code]
Введите 1 число
11
Введите 2 число
7
18
Вот теперь мы получили нужный результат. Однако если ввести не число, а что-то, типа "k288ak192", то будет ошибка в следующей строке
[code]
int n1 = int.Parse(s1); //Тут
[/code]
Выглядеть это будет так:

Для того, чтобы не было внезапного обрыва программы, проверку мы сделаем так:
[code]
Console.WriteLine("Введите 1 число");
string s1 = Console.ReadLine(); //Например, вы ввели '11'
int n1 = 0; //в n1 будет записан результат, по умолчанию выставляется 0
bool b1 = int.TryParse(s1, out n1); //Если успешно, то n1 будет = 11
Console.WriteLine("Введите 2 число");
string s2 = Console.ReadLine(); //Например, вы ввели '7'
int n2 = 0; //в n2 будет записан результат, по умолчанию выставляется 0
bool b2 = int.TryParse(s2, out n2); //Если успешно, то n2 будет = 7
if (b1 && b2) Console.WriteLine(n1 + n2); //Если ошибок нет (b1 == true и b2 == true), тогда результат 18
else Console.WriteLine("Одно из чисел было введено не как число");
[/code]
Ну вот соответственно результат, если ввести не число:
Введите 1 число
11
Введите 2 число
dghda
Одно из чисел было введено не как число
Здесь сперва создаётся число n1 = 0
Далее функция int.TryParse пытается конвертировать строку s1 в число n1. Если это реально число, скажем строка "11" может быть числом 11, тогда в n1 записывается 11, а в b1 записывается True (что означает - успешно).
То же самое происходит с s2 (входная строка), n2(получаемое число), b2(результат да/нет).
А далее идёт проверка, если b1 и b2 дали положительный результат, тогда вывести сумму этих чисел, иначе вывести сообщение об ошибке.
Если число конвертированию не подлежит, то оно равно 0.
Мы введём 11 и dghda. В результате получим 11, т.е. 11+0.
Для конвертирования дробного числа int.TryParse работать не будет. Необходимо использовать double.TryParse
[code]
Console.WriteLine("Введите 1 число");
string s1 = Console.ReadLine(); //Например, вы ввели '11,6'
double n1 = double.Parse(s1);
[/code]
Но и тут может быть ошибка, если double.Parse примет не число, например: "abcd", "34.6.1".
Кстати, если операционная система у вас в качестве разделителя целых и дробных использует запятую, то и вводить надо число через запятую.
Ну а чтобы программа продолжала работу при неверном вводе и не "вылетала", лучше использовать такой код (заменить метод Parse на TryParse):
[code]
Console.WriteLine("Введите 1 число");
string s1 = Console.ReadLine();
double n1 = 0;
double.TryParse(s1,out n1); //Тогда в n1 будет либо число (получилось), либо 0 (не получилось)
[/code]
Дополнительная информация о том, как вывести результат в
консоли или
WinForm