これは私がやりたいことです:
if(ABoolean || (BBoolean && CBoolean))
{
SomeButton.Enabled = true;
AnotherButton.Enabled = true;
}
else
{
SomeButton.Enabled = false;
AnotherButton.Enabled = false;
}
これを次のように切り替えることができます:
SomeButton.Enabled = (ABoolean || (BBoolean && CBoolean));
AnotherButton.Enabled = (ABoolean || (BBoolean && CBoolean));
より簡潔なコードの場合。私の質問は、コンパイラが割り当てを最適化して、ブール式が同じであることを確認し、その値を 2 番目のボタンに割り当てるか、または毎回値を計算するかということです。
注: これは些細な例であり、スピードアップ/スローダウンは取るに足らないほど小さいことは理解していますが、コンパイラの最適化をよりよく理解するのに役立ちます。
編集: 2 番目のオプションが最適化される可能性があると考えた理由は次のとおりです。
class Program
{
static bool ABoolean = true, BBoolean = true, CBoolean = false;
static bool AEnable, BEnable;
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
Operation1();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Stopwatch sw1 = new Stopwatch();
sw1.Start();
for (int i = 0; i < 1000000000; i++)
{
Operation2();
}
sw1.Stop();
Console.WriteLine(sw1.ElapsedMilliseconds);
Console.Read();
}
static void Operation1()
{
if (ABoolean || (BBoolean && CBoolean))
{
AEnable = true;
BEnable = true;
}
else
{
AEnable = false;
BEnable = false;
}
}
static void Operation2()
{
AEnable = (ABoolean || (BBoolean && CBoolean));
BEnable = (ABoolean || (BBoolean && CBoolean));
}
}
これにより、10 億回の操作で約 8 ~ 9 秒の差が生じました (2 番目のオプションの方が高速です)。ただし、「有効」ブール値を追加すると、2 番目の操作が遅くなりました。