Сделайте случай переключения, который запускается на основе Guid - PullRequest
1 голос
/ 28 сентября 2019

Я работаю над делом коммутатора, при котором встречаются определенные guid на основе триггеров ..

Проблема в том, что я не могу сохранить guid без статического чтения только для чтения.

Как мне решить эту проблему?

public struct Types
{
    public static readonly Guid Standard = new Guid("{11111111-1111-1111-1111-111111111111}");
    public static readonly Guid Morning = new Guid("{22222222-2222-2222-2222-222222222222}");
}

public string GetStyle(Guid stage)
{
    switch (stage)
    {
        case Types.Standard:
            return "Not normal";
        case Types.Morning:
            return "Not anormal";
        default:
            return "Normal";
            break;
    }
}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Один из способов справиться с этим - использовать Dictionary<Guid, string> для сопоставления направляющих с их строковыми аналогами, а затем просто вернуть значение из словаря, если оно существует.Это полностью устраняет необходимость в операторе switch и должно привести к более чистому коду.

private Dictionary<Guid, string> StyleMap = new Dictionary<Guid, string>
{
    {Types.Standard, "Not normal" },
    {Types.Morning, "Not anormal" },
};

public string GetStyle(Guid stage)
{
    string result;
    return StyleMap.TryGetValue(stage, out result) ? result : "Normal";
}
1 голос
/ 28 сентября 2019

С последним синтаксисом переключателя (он же «сопоставление с образцом») вы можете достичь этого:

        public static string GetStyle(Guid stage)
        {
            switch (stage)
            {
                case Guid standard when standard == new Guid("{11111111-1111-1111-1111-111111111111}"):
                    return "Not normal";
                case Guid morning when morning == new Guid("{22222222-2222-2222-2222-222222222222}"):
                    return "Not anormal";
                default:
                    return "Normal";
            }
        }
...