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

c-s*_*arp 0 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);
    }
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

如果数组不包含此索引,您可以使用ElementAtOrDefault返回默认值(如果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);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用a for-loop和a switch:

string id = null, body = null, label = null, path = null;
for (int i = 0; i < args.Length; i++)
{
    switch (i)
    {
        case 0: id = args[i]; break;
        case 1: body = args[i]; break;
        case 2: label = args[i]; break;
        case 3: path = args[i]; break;
    }
}
Run Code Online (Sandbox Code Playgroud)