C# 7.0 模式匹配与新的输出参数混合

C# 7.0 Pattern matching mixed with new out parameter

我的目标是在 Pattern matching 和 new out[= 的帮助下解析和打印传入变量16=] c# 7.0 中的变量。但是,该方法抱怨未初始化的局部变量 'i'。不确定我哪里出错了?

static void Main(string[] args)
{
    var input = "23";
    Print(input);
}

static void Print(object o)
{            
    if (o is int || (o is string && int.TryParse((string)o, out int i)))
        Console.WriteLine(i.ToString());            
}

i不保证设置。如果 o is inttrue,则 if 的第二部分不会被执行。

你也必须在第一个条件中分配 i:

if (o is int i || (o is string s && int.TryParse(s, out i))
{
    Console.WriteLine(i.ToString());
}