当条件由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 ] );
}
答案 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);
(当然使用所有产生的组合,开关键会非常愚蠢......)