#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. Поскольку у меня всего один рычаг переключения, третье решение-это именно то, что я искал.