2个可变开关回路

时间:2010-02-12 09:11:40

标签: c# switch-statement if-statement

当条件由2个变量组成时,是否可以在if else上使用switch语句。

感谢。

加入:

foreach( DataRow row in workingTable.Rows )
        {                
            if( isKey && isValue )
                workingDictionary.Add( row[ keyIdentifier ].ToString(), row[ valueIdentifier ] );                            
            else if( isKey && !isValue )
                workingDictionary.Add( row[ keyIdentifier ].ToString(), row[ sValueIdentifier ] );                                                    
            else if( !isKey && isValue )
                workingDictionary.Add( row[ sKeyIdentifier ].ToString(), row[ valueIdentifier ] );                                                   
            else
                workingDictionary.Add( row[ sKeyIdentifier ].ToString(), row[ sValueIdentifier ] );                 
        }

4 个答案:

答案 0 :(得分:4)

这取决于语言 - 例如VB可以理论上这样做,Ruby也是如此。对于大多数其他语言,一个开关=一个变量。

顺便说一下,没有“开关循环”(忽略Duff的设备)。

答案 1 :(得分:3)

或者你可以改写像这样的代码......

foreach( DataRow row in workingTable.Rows ) 
{
    int keyIndex = isKey ? keyIdentifier : sKeyIdentifier;
    int valueIndex = isValue ? valueIdentifier : sValueIdentifier;

    workingDictionary.Add( row[ keyIndex ].ToString(), row[ valueIndex ] );                             
} 

答案 2 :(得分:0)

switch语句不是循环,它提供了使用多个if-else语句的替代方法。

如果你问我可以在switch语句中使用两个变量,答案通常是否定的,但也许你可以将这些值组合起来做一些像C#那样的事情:

string sVal1 "abc", sVal2 = "xyz";
switch(sVal1 + "_" + sVal2)
{
    case "abc_xyz":
        // do something
        break;
    case "def_sdr":
        // do something
        break;
    default:
        // all else
        break;
}

在您的情况下,您很可能需要使用if-else语句。开关不是你想要的。

答案 3 :(得分:0)

如果isKey和isValue是bool castable到int,则强制它们分别位。

unsigned char sw_var = isKey + 2*isValue;

然后sw_var为0-3,具体取决于布尔值。

您可以通过以下方式绑定多个位域:

unsigned long long bitfield = 
    key1 * (1ULL<<0)
  + key2 * (1ULL<<1)
  + key3 * (1ULL<<2)
  ...
  + key63 * (1ULL<<63);

(当然使用所有产生的组合,开关键会非常愚蠢......)