嵌套if语句的任何设计模式?

时间:2018-05-17 16:02:38

标签: c#

任何设计模式都要避免以下嵌套的if语句?对于这种情况,我无法想出任何设计模式。

    private Message GetMessageFrom(string[] args)
    {
        string id = null, body = null, label = null, path = null;

        if (args.Length > 0)
        {
            id = args[0];
            if (args.Length > 1)
            {
                body = args[1];
                if (args.Length > 2)
                {
                    label = args[2];
                    if (args.Length > 3)
                        path = args[3];
                }
            }
        }

        return new Message(id, body, label, path);
    }

2 个答案:

答案 0 :(得分:5)

如果数组不包含此索引,您可以使用ElementAtOrDefault返回默认值(如果是_self.alertmsg = {},则返回null):

string

或者您可以使用string id = args.ElementAtOrDefault(0); string body = args.ElementAtOrDefault(1); string label = args.ElementAtOrDefault(2); string path = args.ElementAtOrDefault(3); return new Message(id, body, label, path); for-loop

switch

答案 1 :(得分:1)

与蒂姆的答案类似,没有循环,这可能是一个选择:

string id = null, body = null, label = null, path = null; 

switch (args.Length) {
     case 4: path  = args[3]; goto case 3;
     case 3: label = args[2]; goto case 2;
     case 2: body  = args[1]; goto case 1;
     case 1: id    = args[0];
} 

我发现它有点丑陋:))