我刚刚遇到了 C# 中的一个小问题,这只是一个复制粘贴错误,但不知道 C# 如何接受它。
此代码已成功编译...HOW
namespace DemoNS
{
class DemoClass
{
String _ = new String('a', 1);
}
}
_
变量有默认意义吗?
最佳答案
如今在 C# 7.0 中,_
有时确实具有重要意义。它成为新 out var
功能的丢弃运算符。当一个函数返回一个值并且你想通知编译器你不会使用它时使用它 - 所以它可以被优化掉。或者在解构时(另一个 C# 7.0 功能)您可以使用它来忽略您不感兴趣的部分元组。
例子 输出变量
void Test(out int i) => i = 1;
Test(out _); // _ was never declared, it will still compile in C# 7.0
var r = _; // error CS0103: The name '_' does not exist in the current context
例子 解构元组
var Person = ("John", "Smith");
var (First, _) = Person; // '_' is not a declared
Debug.Print(First); // prints "John"
Debug.Print(_); // error CS0103: The name '_' does not exist in the current context
如果您确实声明自己的名为 _
的变量,然后使用 discard 运算符,就会出现问题,这会导致歧义。此问题已报告 Here .
编辑
正如@maf-soft 在评论中指出的那样,上述问题不是问题。如果声明了 _
,它将被视为常规变量,就像它是 C# 7.0 之前的版本一样。
EDIT 2021 有点晚了
在c# 8.0中,_
也成为了switch表达式中的catch all操作符,正式命名为discard operator。
示例丢弃运算符
var moreThan20 = val switch
{
>20 => "Yes",
>50 => "Yes - way more!",
_ => "No",
};
丢弃运算符在没有其他模式匹配时分配一个值
关于仅限 C# 变量名称 "_"(下划线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308078/