将另一个属性设置为相反的值

Ari*_*rie 0 c#

我有两个变量CarsSelectedPlanesSelected. 如果有人设置了其中一个,我希望将另一个变量设置为相反的值,因此如果一个为真,另一个必须为假,反之亦然。因此,两个变量最终总是不同的。我的问题是我的代码infinite loop在更改任何值时进入。如何解决?

public class MyClass
{
    private bool _carsSelected;
    private bool _planesSelected;
    
    public bool CarsSelected
    {
        get => _carsSelected;
        set
        {
            _carsSelected= value;
            PlanesSelected= !_carsSelected;
        }
    }
    
    public bool PlanesSelected
    {
        get => _planesSelected;
        set
        {
            _planesSelected= value;
            CarsSelected= !_planesSelected;
        }
    }
    
    public MyClass()
    {
        CarsSelected= false;
        PlanesSelected= false;
    }
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ody 6

您只需要一个支持字段(注意属性中的!运算符PlanesSelected):

public class MyClass
{
    private bool _carsSelected;

    public bool CarsSelected
    {
        get => _carsSelected;
        set
        {
            _carsSelected= value;
        }
    }

    public bool PlanesSelected
    {
        get => !_carsSelected;
        set
        {
            _carsSelected = !value;
        }
    }


    public MyClass()
    {
        CarsSelected= false;
        PlanesSelected= false;
    }
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以CarsSelected通过这种方法使用 auto 属性。但实际上,这看起来更像是您需要一个枚举,而不是两个布尔值:

public enum TranportDevice
{
 Car,
 Plane
}

public class MyClass
{
   public TransportDevice SelectedTransportDevice {get;set;}
}
Run Code Online (Sandbox Code Playgroud)