2016-09-20 3 views
1
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 записей, и каждые несколько минут это «если утверждения» должны быть проверены, если они истинны или ложны. Есть ли другой способ, чтобы они были сохранены в списке профилей или что-то в этом роде, и этот список будет загружен по запросу ...? Или любой более быстрый способ проверить их?Уменьшить проверку длинного списка IFs

+1

, если вы хотите сократить код, возможно. Если вы хотите уменьшить проверку if. скорее всего a no – Steve

+3

Зачем вам нужно проверять его каждые несколько минут? Если это параметры приложения, вы знаете, что существует ['SettingChanging'-event] (https://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.settingchanging (v = vs.110) .aspx)? –

+0

Это похоже на хорошее место, чтобы использовать 'Dictionary ' collection – Fabjan

ответ

2

Ну, вы можете создать словарь с всех setiings и отмечаете отключены с 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 и предпринять соответствующие действия.

+0

Я попробую это сейчас и посмотрю результаты. Спасибо! – user2558921

Смежные вопросы