2014-01-28 45 views
0

我有兩種使用相同交換機結構的方案。有沒有創建兩個基本上重複的交換機,有沒有辦法重用該結構?如何多使用switch語句?

第一種方案:

switch (someString) 
{ 
    case constant1: 
    //create class1 
    break; 
    case constant2: 
    //create class2 
    break; 
    default: 
    break; 
} 

第二種情況:

switch (someString) 
{ 
    case constant1: 
    return true; 
    case constant2: 
    return true; 
    default: 
    return false; 
} 

回答

1

好了,你可以

private static readonly Dictionary<string, Func<Foo>> SomeSensibleName = 
    new Dictionary<string, Func<Foo>> 
{ 
    { Constant1,() => new Class1() }, 
    { Constant2,() => new Class2() }, 
    ... 
}; 
代替第一的

然後:

Func<Foo> factory; 
if (SomeSensibleName.TryGetValue(someString, out factory)) 
{ 
    Foo result = factory(); 
    // Use it, presumably... 
} 

和到位的第二個:

return SomeSensibleName.ContainsKey(someString); 

那是諸如此類的事情,你要找的人?

+0

是的。尼斯。謝謝喬恩。 – 4thSpace

0

您可以考慮使用與會代表提供一個動作:

bool Switcher(string someString, Func<bool> constant1Action, 
           Func<bool> constant2Action, 
           Func<bool> defaultAction) 
{ 
    switch (someString) 
    { 
     case "constant1": 
      return constant1Action(); 
     case "constant2": 
      return constant2Action(); 
     default: 
      return defaultAction(); 
    } 
} 

我甚至不知道這是否會比簡單的開關語句更具可讀性。