0

trueandfalseを使用Enabledせずに bool 構文のレプリカを作成するにはどうすればよいDisabledですか? こんな風に使ってほしい…

sBool E = Enabled;
sBool f = Disabled;

if (e || f == Disabled)
{
    Do something...
}
4

6 に答える 6

2

そのような列挙型を作成するだけです

public enum sBool 
{
    Enabled,
    Disabled
}

次に、コードが次のようになると宣言します。

sBool E = sBool.Enabled;
sBool f = sBool.Disabled;

if (E  == sBool.Disabled || F == sBool.Disabled)
{
    //Do something...
}

編集:if構文を修正

于 2013-08-21T09:30:02.343 に答える
1

次のように列挙型を使用できます。

enum Status 
{
    Enabled,
    Disabled
}

var e = Status.Enabled;
if (e == Status.Disabled) 
{
    // Do something
}

あなたのユースケースが何であるかはわかりませんが、コードの読みやすさ/保守性の観点から、列挙型を使用することが最も単純なソリューションであり、他の開発者が理解しやすいと思います。

于 2013-08-21T09:30:17.990 に答える
0

これを行う良い方法は本当にありません。列挙型は実際には派手な名前の単なる int であるという事実を利用し、ビット単位の演算子を使用して論理演算子をエミュレートできます。

そう:

enum Status { Disabled = 0, Enabled = 1 }

Status a = Status.Disabled;
Status b = Status.Enabled;
if( (a | b) == Status.Enabled){
     //Code
}
于 2013-08-21T09:41:10.963 に答える
0

私はブール値を使用するだけですが、可能な限り最も読みやすい構文でロジックを別のクラスにカプセル化したい場合は、次のようにすることができます。

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) )
{
    // ...
}
于 2013-08-21T10:04:59.723 に答える