使用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我不知道为什么,有什么解释吗,伙计们?对不起,隧道视野。我有一个明确的想法。这的确是一个很有价值的答案!我的缺点是没有以更好的方式表达问题的初衷。