2 переменный контур переключения - PullRequest
0 голосов
/ 12 февраля 2010

Можно ли использовать оператор switch, если еще, когда условие состоит из 2 переменных.

Спасибо.

добавлены:

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 ]

4 голосов
/ 12 февраля 2010

Это зависит от языка - например, VB может сделать это теоретически, как и Ruby. Для большинства других языков один переключатель = одна переменная.

Кстати, такого понятия, как «петля переключателя» (игнорируя устройство Даффа), не существует.

3 голосов
/ 12 февраля 2010

Или вы можете переписать код примерно так ...

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

    workingDictionary.Add( row[ keyIndex ].ToString(), row[ valueIndex ] );                             
} 
0 голосов
/ 12 февраля 2010

, если 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);

(конечно, используя все получившиеся комбинации, клавиша переключения была бы крайне глупой ...)

0 голосов
/ 12 февраля 2010

Оператор 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. Переключатель не то, что вы хотите.

...