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

C#7.0模式匹配与新输出参数混合,c#,c#-7.0,C#,C# 7.0,我的目标是借助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)

我的目标是借助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为int
true
,则不执行
If
的第二部分

您还必须在第一个条件中分配
i

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

如果
o
int
的话,
i
是未知的。这可能是一个很棘手的面试问题。@YawarMurtaza:这将是一个棘手的面试问题,但我不认为它能很好地预测应聘者在面试中的效果。我可以列出语言可能以意外方式运行的各种边缘情况,但这只适用于雇用具有非常特殊的C#知识的人员。。。不一定是那些擅长编写代码的人。我并不是说深入了解C#是件坏事(说起来会很奇怪)——我只是说它不适合采访。@JonSkeet是的,C#已经存在很多年了,而C#7只发布了几个月。即使是最有能力的程序员,我也不会认为他们还不太熟悉它,但这并不意味着他们不能写出一些真正酷的代码。@Maarten,这就是答案。谢谢你会那样做吗?(合并为一个?)不,我的意思是在一个开关中使用两种不同的情况:
caseint I:return I.ToString();int.TryParse(x,out int i)时的大小写字符串x:返回i.ToString()那绝对是干净的,是的。我遗漏了什么吗?我得到了一个格式不正确的表达式,
o is int I
?@JohnG你确定你有C#7?