如何多用switch语句?

时间:2014-01-28 18:49:02

标签: .net c#-4.0 switch-statement

我有两个使用相同开关结构的场景。而不是创建两个基本上重复的开关,有没有办法重用结构?

第一种情况:

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;
}

2 个答案:

答案 0 :(得分: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);

那是你想要的那种吗?

答案 1 :(得分: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();
    }
}

但是我甚至不确定它是否比简单的switch语句更具可读性。