How to use C#'s ternary operator with two byte values?

后端 未结 4 1657
悲&欢浪女
悲&欢浪女 2020-12-18 00:50

There doesn\'t seem to be a way to use C#\'s ternary operator on two bytes like so:

byte someByte = someBoolean ? 0 : 1;

That code currentl

相关标签:
4条回答
  • 2020-12-18 01:18

    You could always do:

    var myByte = Convert.ToByte(myBool);
    

    This will yield myByte == 0 for false and myByte == 1 for true.

    0 讨论(0)
  • 2020-12-18 01:21
    byte someByte = someBoolean ? (byte)0 : (byte)1;
    

    The cast is not a problem here, in fact, the IL code should not have a cast at all.

    Edit: The IL generated looks like this:

    L_0010: ldloc.0          // load the boolean variable to be checked on the stack
    L_0011: brtrue.s L_0016  // branch if true to offset 16
    L_0013: ldc.i4.1         // when false: load a constant 1
    L_0014: br.s L_0017      // goto offset 17
    L_0016: ldc.i4.0         // when true: load a constant 0
    L_0017: stloc.1          // store the result in the byte variable
    
    0 讨论(0)
  • 2020-12-18 01:23
    byte someByte = (byte)(someBoolean ? 0 : 1);
    
    0 讨论(0)
  • 2020-12-18 01:39

    That compiles OK on VS2008.

    Correction: This compiles OK in VS2008:

    byte someByte = true ? 0 : 1;
    byte someByte = false ? 0 : 1;
    

    But this does not:

    bool someBool = true;
    byte someByte = someBool ? 0 : 1;
    

    Odd!

    Edit: Following Eric's advice (see his comment below), I tried this:

    const bool someBool = true;
    byte someByte = someBool ? 0 : 1;
    

    And it compiles perfectly. Not that I distrust Eric; I just wanted to include this here for the sake of completeness.

    0 讨论(0)
提交回复
热议问题