3 回答
TA贡献1803条经验 获得超6个赞
这不是丢弃 - 它是一个名为 的 lambda 表达式参数_
。落入文章后面的注释:
请注意,这
_
也是一个有效的标识符。当在受支持的上下文之外使用时,_
不被视为丢弃,而是被视为有效变量。
你可以说它不是丢弃,因为它的值没有被丢弃——你在 lambda 表达式的其余部分使用它。当您使用该值时,我强烈反对将_
用作 lambda 表达式参数名称。当你想丢弃它时,它可以用作参数名称,即使从语言的角度来看它在技术上不是丢弃。为丢弃物选择这个名称正是因为它已经在实践中使用了。_
_
TA贡献1818条经验 获得超3个赞
这些下划线只是命名_
为 C# 6 中的 lambda 参数。它们不是丢弃项。
在某些新上下文(例如,变量声明)和一些现有上下文(例如,赋值_ = expression;
)中丢弃 C# 7 中引入的位置。在后一种情况下,下划线的 C#6 解释(如果存在)胜出,以尊重向后兼容性。
丢弃是可以分配给但不能读取的变量。他们没有名字。相反,它们由“_”(下划线)表示。在 C#7.0 中,它们可以出现在以下上下文中:
out 变量声明,例如
bool found = TryGetValue(out var _)
orbool found = TryGetValue(out _)
解构作业,例如
(x, _) = deconstructable;
解构声明,例如
(var x, var _) = deconstructable;
是模式,例如
x is int _
开关/案例模式,例如
case int _:
丢弃物的主要表示形式是
_
声明表达式中的(下划线)标记。例如,int _
在 out 变量声明或var (_, _, x)
解构声明中。丢弃的第二种表示是使用表达式
_
作为 的简写var _
,当命名_
的变量不在范围内时。输出变量、解构赋值和声明以及普通赋值 (_ = IgnoredReturn();
) 中都允许使用它。但是,在 C#7.0 模式中不允许这样做。当命名的变量_
确实存在于作用域中时,表达式_
只是对该变量的引用,就像它在早期版本的 C# 中所做的那样。
https://github.com/dotnet/roslyn/blob/master/docs/features/discards.md
TA贡献1827条经验 获得超8个赞
丢弃,它们是临时的虚拟变量,有意在应用程序代码中不使用。Discards相当于未赋值的变量;他们没有价值。因为只有一个丢弃变量,而且该变量甚至可能没有分配存储空间,所以丢弃可以减少内存分配。因为它们使您的代码的意图清晰,所以它们增强了代码的可读性和可维护性。
这意味着这些变量不会在您的代码中使用,并且按照编写的那样,它们没有价值。所以你的查询应该抛出空引用异常(因为那_
是未分配的
- 3 回答
- 0 关注
- 119 浏览
添加回答
举报