使用 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 _);
我最近用下面的代码想到了以下消息
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 _);