在C#7中,您可以执行以下操作
if (int.TryParse("123", out int result))
Console.WriteLine($"Parsed: {result}");
或者-如果您不使用结果,而只是想检查解析是否成功,则discard out值:
if (int.TryParse("123", out _))
Console.WriteLine("Syntax OK");
这通常可以很好地工作,但在Visual Studio2017的第二个示例中,out
参数为空,会生成警告
分析器警告'Microsoft.CodeAnalysis.CSharp.Diagnostics.SimplifyTypeNames.CSharpSimplifyTypeNamesDiagnosticAnalyzer‘:
AD0001引发了类型为“System.NullReferenceException”的异常,并显示消息“”object reference not set to an object instance .“”。“
我可以验证它发生的Visual Studio版本是
Visual Studio企业版2017V15.1 (26403.7)发布
Visual Studio企业版2017V15.2 (26430.4)发布
这是一个错误,还是int.TryParse("123", out _)
的用法不受官方支持?到目前为止,我找不到任何提示。
为了完整起见,下面是显示该问题的控制台应用程序的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
if (int.TryParse("123", out _))
Console.WriteLine("Syntax OK");
}
}
}
发布于 2017-05-04 19:41:11
我向开发团队提交了bug request (request #19180),他们确认这是一个bug。您可以在此处查看整个状态at GitHub dotnet/roslyn.
Pilchie在16小时前发表了评论
我可以在15.2中重现,但不能在15.3中重现。转到基于堆栈的编译器,>但我很确定这是一个骗局。@jcouv?
jcouv在16小时前发表了评论
是的,这是一个副本( #17229,也可能是另一个)。它已在dev15.3 (#17544)中修复,不幸的是,我们无法将>修复添加到dev15.2中。感谢@Matt11提交问题,并为bug道歉。
据我所知,它似乎已经修复,并将在下一次更新中可用。但微软并没有宣布何时将其包括在内,因此我通过Visual Studio 2017中的“发送反馈/报告问题”提交了一个问题。
备注:
static void Main(string[] args) { bool myOutDemo(string str,out int result) { result = (str??"").Length;return result > 0;} //丢弃out参数if (myOutDemo("123",out _)) Console.WriteLine("String not empty");}
感谢所有参与上述讨论的人!(问题评论)
https://stackoverflow.com/questions/43736660
复制相似问题