Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将默认值初始化为C#7 out变量?_C#_C# 7.0 - Fatal编程技术网

如何将默认值初始化为C#7 out变量?

如何将默认值初始化为C#7 out变量?,c#,c#-7.0,C#,C# 7.0,我使用TryParse将字符串解析为数字。我需要一个用默认值初始化out变量的解决方案,所以当TryParse无法转换时,我会得到默认值 代码如下: long.TryParse(input.Code, out long Code = 123); //Error CS1525 Invalid expression term '=' 我想严格地使用C#7 out变量标准 你做不到。。。NET运行时不知道长.TryParse的任何“成功”或“失败”。它只知道TryParse有一个bool返回值,

我使用
TryParse
将字符串解析为数字。我需要一个用默认值初始化out变量的解决方案,所以当TryParse无法转换时,我会得到默认值

代码如下:

long.TryParse(input.Code, out long Code = 123);
//Error CS1525  Invalid expression term '=' 

我想严格地使用C#7 out变量标准

你做不到。。。NET运行时不知道长.TryParse的任何“成功”或“失败”。它只知道
TryParse
有一个
bool
返回值,并且在
TryParse
完成后,
out
变量将被初始化。
true
与“结果中存在良好值”,
false
与“结果中没有良好值”之间没有必要的相关性

为了明确起见,您可以:

static bool NotTryParse(string s, out long result)
{
    return !long.TryParse(s, out result);
}

现在呢?什么时候应该使用默认值?

虽然
out
参数本身不能采用默认值,但您可以使用C#7中的单个表达式实现所需的功能。只需将
out
参数与三元表达式组合即可:

var code = long.TryParse(input.Code, out long result) ? result : 123;

用默认值初始化是什么意思?out参数的值由该方法设置。如果要在出现错误时设置值,则必须编写所需的代码。顺便说一下,这一点没有改变。这就是为什么我们总是这样worked@PanagiotisKanavos很抱歉,我误解了参数。让我们假设从语言的角度来看这是有意义的——“如果不是,为什么它不标准化”添加到语言中的每一个功能都必须设计和实现,并增加语法的复杂性-根本没有足够的时间来做每件事,同时确保你不会在其他地方破坏其他东西。是的。。好像我误解了变量@莫森萨卡没有什么不好的。。。大多数人误解了“out”变量和整个by-ref事件。对于上下文,“out”与“ref”相同,只是一些编译器调整了“definiteassignment”。10次中有9次:人们理解“ref”的意思。我想在这里提出一点: