C#关键字“out”作为方法TryParse()中的输出参数

时间:2017-05-10 12:54:37

标签: c# c#-6.0

嘿伙计们!

我想知道,为什么我必须在 TryParse()方法中使用输出参数,因为对我而言,我们不清楚为什么要使用它。 / p>

例如:

int number;
if (int.TryParse("2", out number))
    Console.WriteLine("The parse worked!");
else
    Console.WriteLine("The parse didn't work!");
}

更短的:

int.TryParse("2", out int number)

我希望你能帮助我,你可以给我一些很好的建议!

5 个答案:

答案 0 :(得分:1)

您需要使用B06XKGGYWC参数,因为out已经返回一个布尔值作为结果,因此您也无法返回值。

实际的TryParse关键字只是通过引用传递一个变量,所有这些意味着函数可以为该变量赋值,而不是仅仅使用它当前的值。

我认为这就是你所要求的,但如果你需要对某些事情进行实际澄清,请告诉我:)

答案 1 :(得分:1)

如果没有out参数,TryParse 接收整数的值,但无法在调用方法中修改变量的值。在这种情况下

int number;
if (int.TryParse("2", out number))

目的不仅仅是将number传递给TryParse方法,还要修改number的值。如果没有out参数,number的值将永远不会更改。该函数的唯一用途是查看是否可以解析该数字,因此函数的名称也可能是CanParse

此行为允许您避免评估要解析的值两次。否则你可能需要这样做。

var s = "5";
int x;
if(int.CanParse(s)) //not a real function
{
    x = int.Parse(s);
}

你真的要解析字符串两次 - 一次查看它是否可以解析为int,然后再次获取解析后的值。

副作用是我们必须首先声明out变量,这是一个小麻烦。使用C#7,您甚至不需要这样做。你可以这样做:

if(int.TryParse(out var x))

答案 2 :(得分:0)

因为方法名称TryParse表示它试图解析。 如果您提供的第一个参数无法解析为int类型,它将在out参数中返回false值和默认值0。 因为我们无法预测字符串是否可以解析为int .. out参数很有用。

希望我回答。

答案 3 :(得分:0)

"缺货"关键字检查主要用于溢出检查。 TryParse方法确保在您的情况下提供的Integer值" 2"是Integer-32位等价的外边界(类似于Int32中指定的最小值和最大值)结构类型。

我会说out关键字给你提示是否转换成功来自字符串" 2"或任何其他价值观。

典型值为实际值" 2"是成功的,0-不成功。通过执行此检查,我们可以确保满足条件条件,并且不应该在运行时溢出异常中结束。

答案 4 :(得分:0)

  

为什么需要out关键字?

通常当您使用参数调用方法时,该方法会获取它们自己的变量副本 - 堆栈上的几个字节是为该方法保留的。当方法到达结束时,它释放所有这些字节。因此,存储在那里的任何值都会丢失。 out关键字指示编译器保留该参数的值,以便调用者可以使用它。在内部,它传递对调用方法中原始变量的引用,因此任何更新实际上都会更新调用者的变量,因此它不会丢失。

正如OP在评论中指出的那样。 outref关键字类似,只是在使用ref时,该方法可以忽略它,但必须在返回前为out分配值。