C#6.0中的新功能允许在TryParse方法中声明变量.我有一些代码:
string s = "Hello";
if (int.TryParse(s, out var result))
{
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?PS:在项目设置中设置C#6.0和.NET framework 4.6.
Yuv*_*kov 147
C#6.0中的新功能允许在TryParse方法中声明变量.
声明表达式是从C#6.0中删除的,并未在最终版本中发布.你目前无法做到这一点.在GitHub上为C#7 提出了一个建议(也可以参考这个以供将来参考).
随着C#7的正式发布,以下代码编译:
string s = "42";
if (int.TryParse(s, out var result))
{
Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)
Fat*_*gun 12
偶然发现,在vs2017中,你可以这样做以简洁:
if (!Int64.TryParse(id, out _)) {
// error or whatever...
}
Run Code Online (Sandbox Code Playgroud)
这是C#7的一个新功能,这是一个非常好的功能,通常与模式匹配一起使用.此功能以及更多内容将在C#团队博客中宣布C#7.0中的新功能.
团队试图在这里实现的是更流畅的代码.你还记得一些情况,其中变量列表变得非常长而没有用吗?只是一个简单的例子:
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*/ }
Run Code Online (Sandbox Code Playgroud)
看到问题?把所有那些变量放在那里无所事事是没用的.使用C#7可以减少行数:
if (int.TryParse(o, out int i)) { /*use i*/ }
else if (Guid.TryParse(o, out Guid g)) { /*use g*/ }
else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }
Run Code Online (Sandbox Code Playgroud)
不仅行数最小化,在您不想拥有它们的范围内也没有不必要的变量列表.这可以防止您使用您不打算使用的变量,但现在可以看到该变量.
此功能对于switch
语句中的模式匹配也很有用,例如此代码(其行为与上述代码不同!):
switch (o)
{
case int i: { /*use i*/ break; }
case Guid g: { /*use g*/ break; }
case DateTime d: { /*use d*/ break; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31741 次 |
最近记录: |