C# TryParse()中返回了什么值?
我正在读这本书C# TryParse()中返回了什么值?,c#,tryparse,C#,Tryparse,我正在读这本书 所以我的问题是在第三行boolparsesuccess=Int32.TryParse(str,out Value)Int32.TryParse()不会返回int值吗?那怎么可能是bool呢?关键字out的确切含义是什么?正如方法所说,TryParse,它的意思是它是否能够解析,这就是布尔值所表示的 True:能够成功解析,并且可以从out参数检索解析的值 False:无法将字符串值解析为int。它不会引发任何异常,而是告诉您使用此布尔标志,在这种情况下,您可以使用out para
所以我的问题是在第三行
boolparsesuccess=Int32.TryParse(str,out Value)
Int32.TryParse()不会返回int
值吗?那怎么可能是bool呢?关键字out
的确切含义是什么?正如方法所说,TryParse,它的意思是它是否能够解析,这就是布尔值所表示的
True:能够成功解析,并且可以从out参数检索解析的值
False:无法将字符串值解析为int。它不会引发任何异常,而是告诉您使用此布尔标志,在这种情况下,您可以使用out param的默认值(which为0)或指定您选择的其他值,如下所示:
int intValue = int.TryParse(stringValue, out intValue) ? intValue : myDefaultValue;//mydefaultValue is int containing value of your choice
返回一个布尔值,指示解析是否成功(如果字符串包含非数字字符,则转换将失败)
表示参数是通过引用传递的(这表示传递给TryParse函数的是变量的内存地址)。问题的一部分似乎是: 为什么TryParse被定义为
bool-TryParse(string,out-int)
而不是int-TryParse(string,out-bool)
原因是所选签名允许这种常见模式:
int x;
if (int.TryParse(s, out x))
Console.WriteLine(x); //or do whatever else
有了另一个签名,我们需要这样做:
bool success;
int x = int.TryParse(s, out success);
if (success)
Console.WriteLine(x); // or do whatever else
第一个显然更简洁,根据我的经验,至少绝大多数TryParse调用直接用于流控制,而不是将返回值分配给变量。如果s成功转换,则为true;否则,错误。有一本关于C#编程语言的完整手册。在询问有关该语言语法的基本问题之前,您应该先查看它。看见有关详细参考信息,请参见.No,如果成功解析或未解析字符串,它将返回
布尔值。来自文件;返回值,类型:System.Boolean
;如果s已成功转换,则为true;否则,就错了。如果这本书没有解释TryParse
试图解析并让你知道它是否可以,那就不是一个好的广告int.Parse()
将返回实际值,但如果str
不是int的有效表示形式,则将失败。@Sayse这当然是真的。读你的评论也让我想到了一个类似的点,即变量<代码> PARSUCUCSESS大概是一个线索,从书的作者来指示函数返回的布尔的含义。就像C++中,我们不能用“和”操作符来做这个,或者真的需要使用吗?我只是好奇不同的语言,不同的语法。@IlayaRajaS C#实际上有两种引用参数。一个由ref
关键字表示,另一个由out
表示。编译器保证out参数由被调用的方法明确赋值;在调用方法之前,编译器需要明确指定作为ref参数传递的变量。在C#中,和
运算符仅在不安全代码中允许使用。@IlayaRajaS C#是一种托管内存语言,但在不安全上下文中具有某些非托管功能out
和ref
只是&
的安全版本,C#也可以在不安全代码中使用,这两个版本的保证非常不同,即使它们有效地转换为几乎相同的机器代码。除此之外,C#试图避免使用神秘的操作符——任何可以有合理名称的东西都会有名称。请注意,虽然C#强制执行ref
和out
作为不同用法的独立事物,但底层IL实际上并没有强制执行out
——遗憾的是,这就像ref
。我不确定你所说的“你可以使用任何默认值”是什么意思,但我怀疑你错了。如果TryParse返回false,它会将out参数设置为零。当然,这是因为在返回之前,需要一个包含out参数的方法来设置值。事实上,它无法知道您传入了什么值,因为在读取参数之前,需要一个包含out参数的方法写入参数。@IlayaRajaS这不太正确,因为不同的TryParse方法是以不同的类型定义的。因此,它们不是彼此的重载。也就是说,bool-TryParse(string-value,out-int-result)
是System.Int32
的一个静态方法,而bool-TryParse(string-value,out-bool-result)
是System.Boolean
的一个静态方法。那么您的答案无疑是正确的。谢谢你的澄清
bool success;
int x = int.TryParse(s, out success);
if (success)
Console.WriteLine(x); // or do whatever else