2014-01-22 119 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"); 
} 

switch语句?

+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"} 
} 

那么类似的东西(如果你想为每个“全成”多个消息框包含测试,为你的代码提示)。

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是,已编辑。 –