我想在c#中创建一个配对值的结构,其中如果设置了一个值,则会自动相反地设置另一个值。例如,如果我有一个像:
的配对{
public bool Courageous;
public bool Cowardly;
}
因此,如果其中一个被设置,另一个得到"未设置"。有没有相关的零和变量?
答案 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;
}
}
}
{
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; } }
}