Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带变量参数的TryParse_C#_C# 6.0_C# 7.0 - Fatal编程技术网

C# 不带变量参数的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(另请参见以供将来参考) 更新(

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(另请参见以供将来参考)

更新(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...
}