我确定它可以忽略不计,但考虑到我想从一个方法中将 true
分配给一个 boolean 字段,这个选择有什么不同吗?如果是,为什么?
field = true; // could already be true, but I don't care
对比
if(!field) field = true;
最佳答案
我会说不。但这确实取决于我们真正谈论的是一个字段,而不是一个属性,后者可能(尽管它绝对不应该) 在您包含的两个片段中表现出不同的行为(即,如果 setter/getter 中存在带有副作用的逻辑)。
更新:如果您谈论的是性能开销,那实际上没有区别——但是我相信赋值的开销要小得多(比阅读值(value))。这是一个示例程序来演示这一点:
bool b = false;
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
b = true;
}
sw.Stop();
TimeSpan setNoCheckTime = sw.Elapsed;
sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
// This part will never assign, as b will always be true.
if (!b)
{
b = true;
}
}
sw.Stop();
TimeSpan checkSetTime = sw.Elapsed;
Console.WriteLine("Assignment: {0} ms", setNoCheckTime.TotalMilliseconds);
Console.WriteLine("Read: {0} ms", checkSetTime.TotalMilliseconds);
我机器上的输出:
Assignment: 2749.6285 ms Read: 4543.0343 ms
关于c# - 性能 : assign boolean value always or check value first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586795/