2014-01-22 3 views
4

Можно ли сделать оператор switch, который проверяет инструкцию Message.Contains?Заявление оператора Message.Contains

Таким образом, вместо этого:

if (ex.Message.Contains("hnummer")) 
{ 
    MessageBox.Show("Deze laptop staat al in de lijst"); 
} 
if (ex.Message.Contains("serienummmer")) 
{ 
    MessageBox.Show("Dit serienummer staat al in de lijst"); 
} 
if (ex.Message.Contains("olcnummer")) 
{ 
    MessageBox.Show("Dit OLC nummer staat al in de lijst"); 
} 

переключатель заявление?

+2

Пробовали ли вы Это ? – Heslacher

+2

Угадайте, так как это должно быть константой времени компиляции – V4Vendetta

+1

Вы можете создать словарь маркерных строк и делегатов. –

ответ

4

Другим способом было бы использовать словарь

//of course, the "staat al in de lijst" could be a constant, as we like DRY 
var messageDictionary = new Dictionary<string, string>() { 
    {"hnummer", "Deze laptop staat al in de lijst"}, 
    {"serienummmer", "Dit serienummer staat al in de lijst"} 
} 

затем что-то вроде этого (если вы хотите несколько MessageBox для каждого «преуспевающим» содержит тест, так как ваш код предполагает).

foreach (var kvp in messageDictionary) { 
     if (ex.Message.Contains(kvp.Key)) 
     Messagebox.Show(kvp.Value); 
     //break; if you wanna stop after first match. 
} 

или если вы хотите испытать все «содержит», но получить только один агрегированных сообщение

var res = string.Empty; 
foreach (var kvp in messageDictionary) { 
    if (ex.Message.Contains(kvp.Key)) 
      res +=kvp.Value; 
} 
MessageBox.Show(res); 

или «не делать» Oneliner путь

MessageBox.Show(string.Join("\n", messageDictionary.Select(m => ex.Message.Contains(m.Key) ? m.Value : string.Empty))); 
+0

Не, если это часть некоторой функции поиска ... (метод «содержит» предлагает такое использование) – walther

+0

@ walther yes, отредактировано. –

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