2014-01-28 3 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(); 
    } 
} 

НО Я даже не уверен, если это будет более удобным для чтения, чем простые операторы коммутатора.

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