这条线做什么,我应该阅读三元运算符?

时间:2011-10-18 09:01:35

标签: c#

我有这个方法:

public static int SetFlag(this int i, int flag, bool set = true)
{
     return (set) ? i | flag : ((i & flag) != 0) ? (i-flag) : i;

     if(
}

只是想知道如何阅读它。它是说有两个三元的谴责?我是从右到左还是从左到右阅读?

10 个答案:

答案 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;