是否存在"零和" c#中的变量?

时间:2017-08-09 03:17:25

标签: c#

我想在c#中创建一个配对值的结构,其中如果设置了一个值,则会自动相反地设置另一个值。例如,如果我有一个像:

的配对
{
  public bool Courageous;
  public bool Cowardly;
}

因此,如果其中一个被设置,另一个得到"未设置"。有没有相关的零和变量?

2 个答案:

答案 0 :(得分:5)

不要直接公开属性,而是使用属性访问器根据需要改变私有字段:

{
    private bool _courageous;
    private bool _cowardly;

    public bool Courageous
    {
        get { return _courageous; }
        set
        {
            _courageous = value;
            _cowardly = !value;
        }
    }

    public bool Cowardly
    {
        get { return _cowardly; }
        set
        {
            _cowardly = value;
            _courageous = !value;
        }
    }
}

或者,在这种情况下更简单,因为你只有两个bool,它们总是另一个的逻辑反转:

{
    public bool Courageous{ get; set; }
    public bool Cowardly { get { return !Courageous; } set { Courageous = !value; } }
}

您的具体案例将决定您是否可以使用公共支持字段并在一个(或其他)属性的公开属性中执行变异,或者需要具有单独的支持字段和更复杂的访问者。

但一般来说,属性和属性访问器可用于制造您需要的任何此类行为。

答案 1 :(得分:2)

您可以尝试属性

{
    private bool _courageous;
    public bool Courageous 
    {
        get 
        {
            return _courageous;
        }
        set
        {
            _courageous = value;
            _cowardly = !value;
        }
    }

    private bool _cowardly;
    public bool Cowardly 
    {
        get 
        {
            return _cowardly;
        }
        set
        {
            _cowardly = value;
            _courageous = !value;
        }
    }
}

zzzzbovAmy建议使用一个支持字段

{
    private bool _courageous;
    public bool Courageous 
    {
        get 
        {
            return _courageous;
        }
        set
        {
            _courageous = value;
        }
    }

    public bool Cowardly 
    {
        get 
        {
            return !_courageous;
        }
        set
        {
            _courageous = !value;
        }
    }
}

或没有支持字段see other answer

{
    public bool Courageous{ get; set; }
    public bool Cowardly { get { return !Courageous; } set { Courageous = !value; } }
}