C# 消除函数内部的if-else 的简单的方法

在很多情况下,有些函数内部有太多的if-else,不太直观,也难以维护。举个简单的例子:

class Program
    {
        static void Main(string[] args)
        {
            ShowErrorMessage("3");
            Console.ReadLine();
        }

        public static void ShowErrorMessage(string input)
        {
            string errorMessage;
            if (input == "1")
            {
                errorMessage = $"One({input})";
                Console.WriteLine(errorMessage);
                return;
            }
            else if (input == "2")
            {
                errorMessage = $"Two({input})";
                Console.WriteLine(errorMessage);
                return;
            }
            else if (input == "3")
            {
                errorMessage = $"Three({input})";
                Console.WriteLine(errorMessage);
                return;
            }
            else if (input == "4")
            {
                errorMessage = $"Four({input})";
                Console.WriteLine(errorMessage);
                return;
            }
            else
            {
                Console.WriteLine("Unknow error!");
            }
        }
    }

在网络上有很多解决的方案,比如策略+工厂+ 配置等复合设计模式,或者反射,实现起来大都比较复杂,对于这么一个简单的函数,有些杀鸡用牛刀的感觉。下面介绍一种比较简单的方法:

private static Dictionary<string, Func<string>> errorMessages = new Dictionary<string, Func<string>>
{
    { "1", ()=>{ return $"One(1)";} },
    { "2", ()=>{ return $"Two(2)";} },
    { "3", ()=>{ return $"Three(3)";} },
    { "4", ()=>{ return $"Four(4)";} },
};
public static void ShowErrorMessage(string input)
{
    if (!string.IsNullOrWhiteSpace(input) && errorMessages.ContainsKey(input))
    {
        Console.WriteLine(errorMessages[input].Invoke());
    }

    Console.WriteLine("Unknow error!");
}

通过Dictionary配置+Func的方式,消除了过多的if-else结构,当需要增加一项逻辑判断的时候,不需更改主函数ShowErrorMessage,仅在Dictionary中增加一项配置即可。

posted @ 2021-06-23 16:24  SilverFox8588  阅读(684)  评论(0编辑  收藏  举报