带条件语句的对象初始值设定项

时间:2017-08-25 20:47:02

标签: c# object initializer

如何简化对象初始值设定项中的条件语句,以便代码更易读?如果addNew为true,则将新项添加到字典中,否则它只有一个项。

...
var channel = new ChannelConf {
Name = "Abc"
Headers = !addNew ?  new Dictionary<string, string> 
          { 
               [Constants.Key1] = Id
          }
          : new Dictionary<string, string>
          {
               [Constants.Key1] = Id,
               [Constants.Key2] = Port
          }
}
...

2 个答案:

答案 0 :(得分:1)

您可以调用方法初始化Headers

...
new ChannelConf {
Name = "Abc"
Headers = GetNewDictionary(addNew)
}
...

private Dictionary<string, string> GetNewDictionary(bool addNew)
{
    Dictionary<string, string> output = new Dictionary<string, string> { [Constants.Key1] = Id };

    if (addNew) { output.Add(Constants.Key2, Port); }

    return output;
}

或者,您可以保持原样并减少行数:

...
var channel = new ChannelConf {
Name = "Abc"
Headers = !addNew ?  new Dictionary<string, string>  { [Constants.Key1] = Id }
          : new Dictionary<string, string> { [Constants.Key1] = Id, [Constants.Key2] = Port }
}
...

答案 1 :(得分:0)

我认为通过参数化构造函数完成任务是一种很好的做法。它可能是其他人消费的常见API,因此您可以轻松记录,而不必告诉消费者应该如何使用api。

public ChannelConf(bool addNew)
{
    Headers = !addNew
        ? new Dictionary<string, string>
        { [Constants.Key1] = Id }
        : new Dictionary<string, string>
        {
            [Constants.Key1] = Id,
            [Constants.Key2] = Port
        };
}