Чем различаются var и object? (C#)
Почему после объявления переменной choice типа var он позволяет входить в цикл switch? Разве var не должен присваивать конкретный тип результата выполнения условной операции переменной choice (integer или object)? Тем самым один из case'ов не сможет обработать шаблон типа. Почему choice всё равно обозначается как object в VS?

object langChoice = Console.ReadLine();
var choice = int.TryParse(langChoice.ToString(), out int num) ? num : langChoice;
switch (choice)
{
case int i when i == 2:
case string s when s.Equals("VB", StringComparison.CurrentCultureIgnoreCase):
Console.WriteLine("Visual Basic - amazing");
break;
case int i when i == 1:
case string s when s.Equals("C#", StringComparison.CurrentCultureIgnoreCase):
Console.WriteLine("C# - cool!");
break;
default:
Console.WriteLine("Well.. good luck!");
break;
}
Ответы (1 шт):
Как уже упомянул Grundy var выводится в object. У вас в правой части тернарный оператор, то есть получается, что если методу удастся получить целое число (int) из langChoice, то он вернет значение переменной num типа int, иначе вернет langChoice, который является объектом. Он вывел тип на основе того факта, что он не знает, что будет в локальной переменной langChoice, поэтому он не знает, может ли он привести к типу int, а локальную переменную типа int можно легко привести к object(упаковать).