true
andfalse
を使用Enabled
せずに bool 構文のレプリカを作成するにはどうすればよいDisabled
ですか? こんな風に使ってほしい…
sBool E = Enabled;
sBool f = Disabled;
if (e || f == Disabled)
{
Do something...
}
そのような列挙型を作成するだけです
public enum sBool
{
Enabled,
Disabled
}
次に、コードが次のようになると宣言します。
sBool E = sBool.Enabled;
sBool f = sBool.Disabled;
if (E == sBool.Disabled || F == sBool.Disabled)
{
//Do something...
}
編集:if
構文を修正
次のように列挙型を使用できます。
enum Status
{
Enabled,
Disabled
}
var e = Status.Enabled;
if (e == Status.Disabled)
{
// Do something
}
あなたのユースケースが何であるかはわかりませんが、コードの読みやすさ/保守性の観点から、列挙型を使用することが最も単純なソリューションであり、他の開発者が理解しやすいと思います。
これを行う良い方法は本当にありません。列挙型は実際には派手な名前の単なる int であるという事実を利用し、ビット単位の演算子を使用して論理演算子をエミュレートできます。
そう:
enum Status { Disabled = 0, Enabled = 1 }
Status a = Status.Disabled;
Status b = Status.Enabled;
if( (a | b) == Status.Enabled){
//Code
}
私はブール値を使用するだけですが、可能な限り最も読みやすい構文でロジックを別のクラスにカプセル化したい場合は、次のようにすることができます。
public sealed class Status: IEquatable<Status>
{
public Status(bool isEnabled)
{
_isEnabled = isEnabled;
}
public bool IsEnabled
{
get { return _isEnabled; }
}
public bool IsDisabled
{
get { return !_isEnabled; }
}
public bool Equals(Status other)
{
return other != null && this.IsEnabled == other.IsEnabled;
}
public static implicit operator bool(Status status)
{
return status.IsEnabled;
}
public static Status Enabled
{
get { return _enabled; }
}
public static Status Disabled
{
get { return _disabled; }
}
private readonly bool _isEnabled;
private static readonly Status _enabled = new Status(true);
private static readonly Status _disabled = new Status(false);
}
次に、サンプル コードに対して、次のようなことを行います。
Status e = Status.Enabled;
Status f = Status.Disabled;
if (e || f.IsDisabled)
{
// ...
}
// Alternatively:
if ( e.Equals(Status.Enabled) || f.Equals(Status.Disabled) )
{
// ...
}