2010-02-12 2 views
0

Можно ли использовать оператор switch, если else, когда условие выполнено из 2 переменных.2 switch 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 ]);     
     } 
+0

Можете ли вы уточнить? Если вы можете показать оператор 'if', тогда это было бы полезно. – rahul

+2

Также 'switch' - это не циклическая структура, ее инструкция. – rahul

ответ

3

Или вы могли бы переписать код что-то вроде этого ...

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

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

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

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

0

Оператор switch не является циклом, он предоставляет альтернативу использованию нескольких операторов if-else.

Если вы спрашиваете, можно ли использовать две переменные в распределительном заявление, ответ, как правило, нет, но, может быть, вы могли бы объединить значения, чтобы сделать что-то, как в 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. Переключатель не то, что вы хотите.

0

if isKey и isValue - это bool castable to 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); 

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