Как объявить параметры, возвращаемые выражением переключателя C# 8?
Я смотрю на этот код:
public enum MO
{
Learn, Practice, Quiz
}
public enum CC
{
H
}
public class SomeSettings
{
public MO Mode { get; set; }
public CC Cc { get; set; }
}
static void Main(string[] args)
{
var Settings = new SomeSettings() { Cc = CC.H, Mode = MO.Practice };
var (msg,isCC,upd) = Settings.Mode switch {
case MO.Learn => ("Use this mode when you are first learning the phrases and their meanings.",
Settings.Cc == CC.H,
false),
case MO.Practice => ("Use this mode to help you memorize the phrases and their meanings.",
Settings.Cc == CC.H,
false),
case MO.Quiz => ("Use this mode to run a self marked test.",
Settings.Cc == CC.H,
true);
_ => default;
}
}
К сожалению, кажется, что msg
, isCC
а также upd
объявлены неправильно, и появляется сообщение об этом:
Невозможно определить тип неявно типизированной деконструктивной переменной msg и того же для isCC и upd.
Не могли бы вы объяснить мне, как я могу их объявить?
2 ответа
Решение
case
метки не используются с выражениями переключателя, у вас есть;
посередине, и нет ;
после:
var (msg, isCC, upd) = Settings.Mode switch {
MO.Learn => ("Use this mode when you are first learning the phrases and their meanings.",
Settings.Cc == CC.H,
false),
MO.Practice => ("Use this mode to help you memorize the phrases and their meanings.",
Settings.Cc == CC.H,
false),
MO.Quiz => ("Use this mode to run a self marked test.",
Settings.Cc == CC.H,
true),
_ => default
};
Пишу без проверки, но вы можете попробовать что-то вроде этого:
(string msg, bool isCC, bool upd) result = Settings.Mode switch ... <rest of your code>
Тогда используйте это так:
result.msg