我更喜欢将布尔值转换为整数,但我发现使用条件运算符?:就像在示例中一样:
boolVal ? 1 : 0;
我认为这看起来很荒谬。从.NET中的布尔值获取数值的最有效方法是什么?
答案 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 operator和Convert.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)
与条件运算符几乎相同。