Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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
使用out时不必要的赋值c#_C#_Out - Fatal编程技术网

使用out时不必要的赋值c#

使用out时不必要的赋值c#,c#,out,C#,Out,我最近用下面的代码看到了下面的消息 string errorMessage = String.Empty; 我得到了: MessageIDE0059不必要地为“errorMessage”赋值 这里唯一使用的地方是 var valid = IsValid(out errorMessage); 为什么我会收到这条消息?在使用out修饰符获取变量的函数中,.net编译器强制我们为任何out参数赋值 因此,在下面的示例中: public bool IsValid(out string errorMe

我最近用下面的代码看到了下面的消息

string errorMessage = String.Empty;
我得到了:

MessageIDE0059不必要地为“errorMessage”赋值

这里唯一使用的地方是

var valid = IsValid(out errorMessage);

为什么我会收到这条消息?

在使用
out
修饰符获取变量的函数中,.net编译器强制我们为任何
out
参数赋值

因此,在下面的示例中:

public bool IsValid(out string errorMessage) {
   return true;
}
我们会得到错误

Error CS0177在控件离开当前方法ServicesUtils之前,必须将out参数'errorMessage'分配给

由于赋值是强制性的,编译器足够聪明,可以事先警告我们冗余赋值,这将以强制性方式重写


这样我们就不会被初始赋值误导。

只是不要设置初始值。这是完全有效的代码:

string errorMessage;
var valid = IsValid(out errorMessage);   
或使用

var valid=IsValid(out var errorMessage);
编译器知道该变量用作
out
参数,除非抛出异常,否则将获取一个值

另一方面,
IsValid
必须在out参数中存储一个值,覆盖任何初始值。原始值从未使用过,因此不需要赋值

这不会编译:

public bool IsValid(out string errorMessage) {
   return true;
}
并返回:

CS0177在控件离开当前方法之前,必须将out参数“errorMessage”分配给

这将有助于:

public bool IsValid(out string errorMessage) {
   errorMessage="";
   return true;
}

我不认为该消息需要解释,它基本上说您分配给
errorMessage
的值是不必要的,因为您从未使用过(
errorMessage
)变量

在这种情况下,如果您从未计划使用
errorMessage
变量,您可以使用一个名为的方便工具,这样您就可以编写:

bool value = IsValid(out _);

或者您可以使用
out var
。或者不分配任何内容-
字符串错误消息IsValid
中的code>works甚至不会编译,因为从未分配
errorMessage
IsValid
必须在其中放入一些内容,即使它是
null
这就是我要说的。它将提供一个错误,这就是为什么我首先要得到消息。为什么要分配呢<代码>字符串错误消息works@SeM我将警告改为消息@Panagiotis Kanavos-我想知道为什么
string errorMessage
有效。自从我弄明白了,我想与社区分享。@AthanasiosKataras你发布的东西甚至都没有编译。给变量赋值不是强制性的,给参数赋值是强制性的你是什么意思?在问题或答案中?我使用的是变量。这不是原因。请查看下面我和Panagiotis的解释。@AthanasiosKataras问题是这个变量从未被使用:
唯一被使用的地方是…
。这是一个很好的答案,应该投票表决。为什么会这样?我要是想到这个就好了first@PanagiotisKanavos我不知道为什么,有什么解释吗,伙计们?对不起,隧道视野。我有一个明确的想法。这的确是一个很有价值的答案!我的缺点是没有以更好的方式表达问题的初衷。