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

Unecessary assignment of a value c# when using out

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

string errorMessage = String.Empty;

我得到了:

Message IDE0059 Unnecessary assignment of a value to 'errorMessage'

唯一用到的地方是

var valid = IsValid(out errorMessage);

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

.net 编译器强制我们为获取带有 out 修饰符的变量的函数中的任何 out 参数赋值。

所以在下面的例子中:

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

我们会得到错误

Error CS0177 The out parameter 'errorMessage' must be assigned to before control leaves the current method ServicesUtils

由于强制赋值,编译器很聪明地预先警告我们冗余赋值,将以强制方式覆盖。

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

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

string errorMessage;
var valid = IsValid(out errorMessage);   

或使用

var valid=IsValid(out var errorMessage);

编译器知道该变量用作out参数,除非抛出异常,否则将获得一个值。

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

这不会编译:

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

和return:

CS0177 The out parameter 'errorMessage' must be assigned to before control leaves the current method

这会起作用:

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

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

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

bool value = IsValid(out _);