减少检查一长串IF

时间:2016-09-20 14:28:06

标签: c# list if-statement

if (Settings.EnableColors)
{
    if (Settings.EnableRed) { content.Add("Color red", Color.Red);}
    if (Settings.EnableGreen) { content.Add("Color green", Color.Green);}
    if (Settings.EnableBlue) { content.Add("Color blue", Color.Blue);}
    if (Settings.EnableYellow) { content.Add("Color yellow", Color.Yellow);}
}

该列表包含1000多个条目,如果为true或false,则必须每隔几分钟检查一次“if语句”。 是否还有其他方法可以将它们保存在配置文件列表或其他内容中,并且该列表可以按需加载...? 或者更快的方法来检查它们?

1 个答案:

答案 0 :(得分:2)

好吧,您可以使用所有 seseings创建一个词典,并使用null值标记为已禁用:

// if value is null then color is not enabled
private readonly Dictionary<string, Color?> _colors = new Dictionary<string, Color?>()
{
   { "red", Color.Red},  // is enabled
   { "green", null}      // is disabled
};

然后循环遍历这个字典的方法:

if (!Settings.EnableColors) { return; }

foreach(var kv in _colors)
{
    if(kv.Value.HasValue) { content.Add($"Color {kv.Key}", kv.Value);}
}

或者您可以使用事件:

public class ColorChangedEventArgs
{
    public Color Color { get; set; }
    public bool IsEnabled { get; set; }
}

public event EventHandler<ColorChangedEventArgs> ColorSettingsChanged;

然后从某种方法订阅它:

ColorSettingChanged += (sender, args) => // ... use args here to access new value

要发射事件,您只需致电:

ColorSettingChanged(this, new ColorChangedEventArgs{ Color = Color.Red, IsEnabled = true});

所以主要图片是:

每当用户更改设置时,都会触发此ColorSettingsChanged事件,并且在处理程序中,可以通过此ColorChangedEventArgs实例访问新设置并采取相应措施。