【问题标题】: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 语句更具可读性。