【问题标题】:2 variable switch loop2 变量开关循环
【发布时间】:2010-02-12 09:11:39
【问题描述】:

当条件由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 ] );                 
        }

【问题讨论】:

  • 你能说得更具体点吗?如果您可以显示if 语句,那将很有帮助。
  • 另外switch 不是循环结构,它是一个语句。

标签: c# switch-statement if-statement


【解决方案1】:

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

顺便说一句,没有“开关循环”之类的东西(忽略 Duff 的设备)。

【讨论】:

    【解决方案2】:

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

    foreach( DataRow row in workingTable.Rows ) 
    {
        int keyIndex = isKey ? keyIdentifier : sKeyIdentifier;
        int valueIndex = isValue ? valueIdentifier : sValueIdentifier;
    
        workingDictionary.Add( row[ keyIndex ].ToString(), row[ valueIndex ] );                             
    } 
    

    【讨论】:

      【解决方案3】:

      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 语句。开关不是你想要的。

      【讨论】:

        【解决方案4】:

        如果 isKey 和 isValue 可以 bool 转换为 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);
        

        (当然,使用所有组合键会非常愚蠢......)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-15
          • 1970-01-01
          • 2010-11-13
          • 1970-01-01
          • 1970-01-01
          • 2017-11-14
          • 2014-11-17
          • 1970-01-01
          相关资源
          最近更新 更多