是否可以将C#7丢弃运算符与ref运算符一起使用,而不是使用out。
示例:
int testInt;
if (!Int32.TryParse(AnyString, ref testInt)) {
// do something
}
答案 0 :(得分:2)
您编写的内容无法编译,因此我假设您以它为例。但是没有抛弃运算符不能与ref一起使用。我不确定你为什么还要。如果您有一个要丢弃输出的用例,只需使用out即可。
if (!Int32.TryParse(AnyString, out _)) {
// do something
}
答案 1 :(得分:1)
来自docs:
在C#7.0中,以下分配在分配中支持丢弃 上下文:
元组和对象解构。
使用is
和switch
进行模式匹配。
调用带有out
参数的方法。
如果范围内没有_
,则为独立的_
。
int.TryParse
显然期望一个out
参数。您所指的运算符不会改变它。
除此ref
以外,还意味着该值已被初始化为某个值,以便在方法中使用它。因此,当您需要提供的值并随后对其进行更改时,有效地使用ref
,而out
只是对提供的值不执行任何操作,它只是返回。这就是为什么您必须初始化由ref
传递的变量,而对于out
参数则不需要初始化的原因。
换句话说。如果您的方法需要一个ref
参数,则可以使用提供的值并在您的方法中使用它:
void DoSomething(ref int i)
{
var a = i + 1;
i = a;
}
这显然是假设i
具有一个值集。
另一方面,您无法通过方法内的out
传递值来进行任何操作:
void DoSomething(out int i)
{
var a = i + 1; // won´t compile because i has not been set
i = a;
}
那么,您引用的运算符为什么不适用于ref
?这就是我上面所说的:使用ref
假设您在传递值之前先初始化该值。但是您无法初始化丢弃的变量。
答案 2 :(得分:0)
您不应在此处使用ref。相反,您可以使用out参数进行丢弃。示例代码如下:
if(!int.tryParse(yourString, out string _)){//Do something}