Кортежи именованных значений

#c#

Вопрос:

Есть ли в C# способ использовать «var foo», но при этом иметь именованный кортеж?

 (int first, int second) foo = "bar" switch {  _ =gt; (0, 0) };  

Может быть, где-нибудь, где сам коммутатор может определить тип возвращаемого значения?

Комментарии:

1. Это возможно, но это сделает ваш код длиннее, чем если бы вы его использовали (int first, int second) foo . Ты уверен, что хочешь это сделать? Что тебе в этом не нравится ? (int first, int second) foo

2. Нет, не срочно. Это была смесь любопытства и небольшой выгоды, если бы это длинное определение не было в начале строки. PS: и вопрос, могут ли здесь помочь эти новые типы возвращаемых лямбд C# 10.

Ответ №1:

Вы можете наложить гипс перед switch :

 var foo = ((int first, int second))("bar" switch {  _ =gt; (0, 0) });  

Или вы можете разыграть каждый рычаг переключателя (вам придется сделать это для каждого рычага).:

 var foo = "bar" switch {  _ =gt; ((int first, int second))(0, 0) };  

или укажите имена элементов кортежа в каждом плече (опять же, вам придется сделать это для каждого плеча).:

 var foo = "bar" switch {  _ =gt; (first: 0, second: 0) };  

Но в любом случае это дольше, чем использование (int first, int second) foo , поэтому я не рекомендую этого делать.

Комментарии:

1. БОЖЕ мой! Я попробовал этот гипс и забыл о вторых скобках.

2. Поскольку у меня всего один рычаг переключения, третье решение-это именно то, что я искал.