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