C# 不带变量参数的TryParse
C#6.0中的一个新特性允许在TryParse方法中声明变量。 我有一些代码:C# 不带变量参数的TryParse,c#,c#-6.0,c#-7.0,C#,C# 6.0,C# 7.0,C#6.0中的一个新特性允许在TryParse方法中声明变量。 我有一些代码: string s = "Hello"; if (int.TryParse(s, out var result)) { } 但我收到编译错误: 我做错了什么? 注意:在项目设置中设置了C#6.0和.NET framework 4.6 C#6.0中的一个新特性允许在TryParse中声明变量 方法 声明表达式是从C#6.0中删去的,没有在最终版本中发布。你现在不能这么做。有关C#7(另请参见以供将来参考) 更新(
string s = "Hello";
if (int.TryParse(s, out var result))
{
}
但我收到编译错误:
我做错了什么?
注意:在项目设置中设置了C#6.0和.NET framework 4.6
C#6.0中的一个新特性允许在TryParse中声明变量
方法
声明表达式是从C#6.0中删去的,没有在最终版本中发布。你现在不能这么做。有关C#7(另请参见以供将来参考)
更新(07/03/2017)
随着C#7的正式发布,编译了以下代码:
string s = "42";
if (int.TryParse(s, out var result))
{
Console.WriteLine(result);
}
这是C#7的一个新特性,这是一个非常好的特性,经常与模式匹配结合使用。这项功能以及更多功能都在C#team博客中发布 团队试图实现的是更流畅的代码。你还记得有些情况吗?out变量列表变得非常长,没有用了?举个简单的例子:
int i;
Guid g;
DateTime d;
if (int.TryParse(o, out i)) { /*use i*/ }
else if (Guid.TryParse(o, out g)) { /*use g*/ }
else if (DateTime.TryParse(o, out d)) { /*use d*/ }
看到问题了吗?让所有这些变量都坐在那里无所事事是没有用的。可以使用C#7将行数减半:
不仅减少了行数,而且在您不想要的范围内也没有不必要的变量列表。这将阻止您使用一个原本不打算使用但现在可见的变量
此功能对于switch
语句中的模式匹配也很有用,例如在以下代码中(其行为与上述代码不同!):
刚刚偶然发现,在vs2017中,为了简洁起见,您可以这样做:
if (!Int64.TryParse(id, out _)) {
// error or whatever...
}
非常感谢您提供的信息!它是从最终版本中删掉的,对我来说这是一个很好的功能。@Anton23让我们希望它进入C#7:)这是我最期待的功能。至少在C#7/VS2017中。你不能再逐字逐句地读下去了吗?答案是C#7,也解释了它是从6.0中删掉的。人们仍然在C#6.0中开发,这是丢弃操作符。
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}
if (!Int64.TryParse(id, out _)) {
// error or whatever...
}