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))
大家好!
我想知道,为什么我必须在 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))