私はより短い変種を好むでしょう。ただし== false
、コードをさらに短くするのに役立つ場合があります。
C# 2.0 を使用するプロジェクトの実際のシナリオでは、これを行う正当な理由は 1 つだけbool?
です。スリーステートbool?
は便利で、この方法で可能な値の 1 つを簡単に確認できます。
(!IsGood)
実際にはif IsGood
is は使えませんbool?
。しかし、書くこと(IsGood.HasValue && IsGood.Value)
はより悪いです(IsGood == true)
。
アイデアを得るために、このサンプルで遊んでください:
bool? value = true; // try false and null too
if (value == true)
{
Console.WriteLine("value is true");
}
else if (value == false)
{
Console.WriteLine("value is false");
}
else
{
Console.WriteLine("value is null");
}
if (!IsGood) { ... }
が と同じではないことを発見したもう 1 つのケースがありif (IsGood == false) { ... }
ます。しかし、これは現実的ではありません;) 演算子のオーバーロードは、ここで一種の助けになるかもしれません:) (そして、ユーザー定義型に bool? のような動作を提供することが意図されているため、AFAIK は C# 2.0 では推奨されていないことを true/false にします。スタンダードタイプで手に入る!)
using System;
namespace BoolHack
{
class Program
{
public struct CrazyBool
{
private readonly bool value;
public CrazyBool(bool value)
{
this.value = value;
}
// Just to make nice init possible ;)
public static implicit operator CrazyBool(bool value)
{
return new CrazyBool(value);
}
public static bool operator==(CrazyBool crazyBool, bool value)
{
return crazyBool.value == value;
}
public static bool operator!=(CrazyBool crazyBool, bool value)
{
return crazyBool.value != value;
}
#region Twisted logic!
public static bool operator true(CrazyBool crazyBool)
{
return !crazyBool.value;
}
public static bool operator false(CrazyBool crazyBool)
{
return crazyBool.value;
}
#endregion Twisted logic!
}
static void Main()
{
CrazyBool IsGood = false;
if (IsGood)
{
if (IsGood == false)
{
Console.WriteLine("Now you should understand why those type is called CrazyBool!");
}
}
}
}
}
だから...注意して演算子のオーバーロードを使用してください:(