【发布时间】:2018-10-10 13:25:17
【问题描述】:
如何检查 System.ValueTuple 是否为默认值?粗略的例子:
(string foo, string bar) MyMethod() => default;
// Later
var result = MyMethod();
if (result is default){ } // doesnt work
我可以使用 C# 7.2 的 default 语法在 MyMethod 中返回默认值。我无法检查默认情况下?这些是我尝试过的:
result is default
result == default
result is default(string, string)
result == default(string, string)
【问题讨论】:
-
不是返回一个“默认”元组,而是返回一个带有结果标志的元组并检查标志。这是最常见的情况之一。此外,
is用于强制转换或模式匹配。在这种情况下,您要求 equality -
一旦 C# 得到它的 "Support for == and != on tuple types"、
result == default((string, string))(编辑:需要额外的括号)甚至result == default应该可以工作,但我们还没有。 -
@PanagiotisKanavos 假设开发人员可能无法控制从公共方法返回的内容。至于这意味着什么,这意味着该操作没有成功返回有意义的值,只是掩饰了。正如我之前所说,问题的精神是学习 C# 语法。
-
@PanagiotisKanavos 它不必与已知值元组直接相关。例如,如果您使用通用方法执行某些操作,并且有时返回默认值(这对于“给我第一个匹配项,如果有的话”这样的场景是完全正确的),如果搜索的数据(通用类型) 是一个值元组吗?这是一个真实的用例。
-
@Wolfsblvt 该用例与返回 null、0 或其他魔法值没有什么不同。值元组通过允许使用类似 Rust 或 Go 的值元组来解决这个问题。与其返回 null 或魔法值并检查 null 或默认值,不如返回一个强类型 (result,error) 元组。这种方式更难忽略错误
标签: c# c#-7.2 valuetuple