我有两个使用相同开关结构的场景。而不是创建两个基本上重复的开关,有没有办法重用结构?
第一种情况:
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;
}
答案 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语句更具可读性。