MSDN Tuple равенства C#7.3 странные строки

Я читал о ValueTuple на MSDN, и есть одна строка кода, которую я не понимаю в этом примере, представляющем новое равенство кортежей в 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(); чтобы проверить условия или обнуляемые значения, но я не совсем понимаю, как это работает.

1 ответ

Решение

(int a, int b)? это просто кортеж (int a, int b) который обнуляется ((int a, int b)? или на самом деле Nullable<(int a, int b)>).

Поскольку структуры (и, следовательно, кортежи) не могут быть нулевыми, вы должны обернуть их в обнуляемое значение, чтобы сделать их обнуляемыми. Это то, что делает знак вопроса.

Вы могли бы привыкнуть к аналогичным случаям с intкоторый не может быть null, int? Можно.

Другие вопросы по тегам