从布尔值获取数值

时间:2017-08-22 09:04:55

标签: c# .net

我更喜欢将布尔值转换为整数,但我发现使用条件运算符?:就像在示例中一样:

boolVal ? 1 : 0;

我认为这看起来很荒谬。从.NET中的布尔值获取数值的最有效方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用Convert.ToInt32

int zeroOrOne = Convert.ToInt32(boolVal);

使用最易读的方法,性能将是相同的。

这是Convert.ToInt32的{​​{3}}:

public static int ToInt32(bool value) {
    return value? Boolean.True: Boolean.False;
}

答案 1 :(得分:1)

我进行了快速测试并比较了conditional operatorConvert.ToInt32

bool bVal = true;
Stopwatch sw = new Stopwatch();

sw.Start();
for(int i =0; i < amountOfTries; i++ )
{
    int b = bVal ? 1 : 0;
}
sw.Stop();
Console.WriteLine( $"Conditional operator: {sw.ElapsedTicks}t" );

sw.Restart();
for( int i = 0; i < amountOfTries; i++ )
{
    int b = Convert.ToInt32(bVal);
}
sw.Stop();
Console.WriteLine( $"Convert: {sw.ElapsedTicks}t" );

1000000(100万)次尝试的结果:

条件运算符:7518 ticks
转换:8744刻度

因此条件运算符在这种情况下稍微快一点(它的差别很大,结果也可能不同)。我认为Convert虽然看起来更清晰。

注意:正如您在Tim Schmelter's answer中所看到的,引擎盖Convert.ToInt32(bool)与条件运算符几乎相同。