我有这个方法:
public static int SetFlag(this int i, int flag, bool set = true)
{
return (set) ? i | flag : ((i & flag) != 0) ? (i-flag) : i;
if(
}
只是想知道如何阅读它。它是说有两个三元的谴责?我是从右到左还是从左到右阅读?
答案 0 :(得分:4)
该代码相当于:
if (set)
return i | flag;
else
if ((i & flag) != 0)
return i-flag;
else
return i;
答案 1 :(得分:3)
是的,这里有2个条件。
如果我将其分解,那么它看起来像是
if(set)
{
return (i| flag);
}
else if((i& flag) != 0)
{
return (i-flag);
}
else return i;
请注意,在上面的代码中有很多返回语句,并且与三元运算符相同。虽然没有返回声明,但为了便于阅读,它的复杂性。因此,重构代码会更好。
答案 2 :(得分:1)
是的,那里有两个三元运营商。你可以从内到外,首先用括号,然后是三元运算符来读它。
答案 3 :(得分:1)
这是两个三元运营商。从左到右阅读。
相当于
if (set)
return i | flag;
else
if ((i & flag) != 0)
return i-flag;
else
return i;
答案 4 :(得分:1)
int result;
if(set){
result = i | flag;
} else {
if((i & flag) != 0) {
result = i - flag;
} else {
result = i;
}
}
return result;
或强>
if(set)
return i | flag;
else if((i & flag) != 0)
return i - flag;
else
return i;
或强>
if(set)
return i | flag;
else if((i & flag) != 0)
return i - flag;
return i;
答案 5 :(得分:0)
if set is true
then return i | flag
else if (i&flag) !=0
then return i-flag
else return i
答案 6 :(得分:0)
阅读它:
if (set) {
return i | flag;
} else {
return ((i & flag) != 0) ? (i-flag) : i;
}
答案 7 :(得分:0)
return (set) ? i | flag : ((i & flag) != 0) ? (i-flag) : i;
相当于
return (set) ?
i | flag :
((i & flag) != 0) ?
(i-flag) :
i;
现在更清楚了吗?我会说有些括号没用。
return set ?
i | flag :
(i & flag) != 0 ?
i - flag :
i;
答案 8 :(得分:0)
(设定)?我| flag:((i& flag)!= 0)? (i-flag):我是
等于:
if (set){
i | flag
}else{
if((i & flag) != 0){
(i-flag)
}else{
i
}
}
答案 9 :(得分:0)
if(set)
return i | flag;
else if((i & flag) != 0)
return i - flag;
return i;