【问题标题】:How to multi use switch statement?如何多用switch语句?
【发布时间】:2014-01-28 18:49:01
【问题描述】:

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

第一个场景:

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

【问题讨论】:

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


    【解决方案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);
    

    这就是你要找的东西吗?

    【讨论】:

    • 是的。好的。谢谢乔恩。
    【解决方案2】:

    您可以考虑使用委托来提供操作:

    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 语句更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多