MSDN 元组相等 C#7.3 奇怪的行

MSDN Tuple equality C#7.3 weird line

我在 MSDN 上阅读了有关 ValueTuple 的内容,但在展示 C#7.3 的新元组相等性的示例中有一行代码我不明白:

var left = (a: 5, b: 10);
var right = (a: 5, b: 10);
(int a, int b)? nullableTuple = right; //this line here
Console.WriteLine(left == nullableTuple);

我习惯了'?'像 a==b?c():d();c?.ToString(); 这样的语法来测试条件或可为 null 的值,但我不太明白它是如何工作的。

(int a, int b)? 只是一个可以为空的元组 (int a, int b)(int a, int b)? 或实际上 Nullable<(int a, int b)>)。

由于结构(以及元组)不能为空,因此您必须将它们包装在可为空的对象中才能使它们可为空。这就是问号的作用。

您可能已经习惯了 int 的类似情况,但不可能是 nullint?可以。