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

C# keyword "out" as an output parameter in the method TryParse()

大家好!

我想知道,为什么我必须在 TryParse() - 方法中使用 输出参数 ,因为对我来说它是不清楚我们为什么使用它。

例如:

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)

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

您需要使用 out 参数,因为 TryParse 已经 return 作为布尔值,因此您也不能 return 一个值。

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

我想这就是您要问的问题,但如果您需要具体说明,请告诉我:)

因为方法名 TryParse 意味着它试图解析。 如果您提供的第一个参数无法解析为 int 类型,它将 return 您的 false 值和输出参数中的默认值 0。 由于我们无法预测字符串是否可以解析为 int .. out 参数很有用。

希望我回答了。

"Out" 关键字检查基本上用于溢出检查。 TryParse 方法确保在您的案例“2”中提供的整数值在 Integer-32 位等价物的边界之外(类似于 Int32 中指定的最小值和最大值)结构类型。

我会说 out 关键字会提示您是否从字符串“2”或任何其他值转换成功。

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

Why the out keyword is necessary?

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

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

如果没有 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))