我有这样的代码:
if (pref_const == Constants.PREF_PricingTypesFormWidth)
{
a = 2;
b = 3;
DoneFlag = true;
}
if (pref_const == Constants.PREF_PricingTypesFormTop)
{
a = 4;
b = 2;
DoneFlag = true;
}
......
if(!DoneFlag)//replacing of default-section in switch-statement
{
//DoSthng
}
许多其他if语句。不要问我为什么不使用switch-statement。 那么,有没有办法减少DoneFlag变量?
答案 0 :(得分:2)
您可以稍微优化您的解决方案,这样Done标志值将仅设置为单行,其他所有标准值将保持不变。对你好吗?
LINQ Any():
using System.Linq;
// Assuming constants are strings
IList<string> constants = new List<string>
{
Constants.PREF_PricingTypesFormWidth,
Constants.PREF_PricingTypesFormTop,
};
bool DoneFlag = constants.Any(p => p == perf_const);
确定序列的任何元素是否满足条件
答案 1 :(得分:1)
假设通过“reduce”表示“消除”,不使用if-then-else
的逻辑等效的嵌套DoneFlag
语句链如下:
if (pref_const == Constants.PREF_PricingTypesFormWidth)
{
a = 2;
b = 3;
}
else // <<===
if (pref_const == Constants.PREF_PricingTypesFormTop)
{
a = 4;
b = 2;
}
else //replacing of default-section in switch-statement
{
//DoSthng
}
答案 2 :(得分:1)
使用多态:让每个具体的类设置变量,这样你的消费代码就不知道或不关心哪个类在做它。
注意:由于您的接受率,此答案有意缩短。