代码段。如果在switch-statement前面

时间:2012-03-02 15:57:45

标签: c# if-statement switch-statement

我有这样的代码:

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变量?

3 个答案:

答案 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);

Enumerable.Any()

  

确定序列的任何元素是否满足条件

答案 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)

使用多态:让每个具体的类设置变量,这样你的消费代码就不知道或不关心哪个类在做它。

注意:由于您的接受率,此答案有意缩短。