如何使用其他属性的条件设置布尔属性



所以我有这些属性,我想根据这些属性设置另一个属性:

public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
private bool _hasDateRange;

我想将_hasDateRange设置为true或false,具体取决于StartDate和EndDate是否不同于null。

我想到的是这个,但它似乎不起作用;

public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
private bool _hasDateRange;
public bool HasRange
{
get => _hasDateRange;
set
{
if (this.StartDate != null && this.EndDate != null)
{
this._hasDateRange = true;
}
else
{
this._hasDateRange = false;
}
}
}

您想要一个get-only属性。为什么要求您首先调用setter来计算值?任何属性的setter都应该将特殊变量value的值分配给该属性的backing字段,而不是忽略它

您希望计算属性的返回值:

public bool HasRange
{
get
{
if (this.StartDate != null && this.EndDate != null)
{
return true;
}
else
{
return false;
}
}
}

背字段(_hasDateRange(现在不再需要,可以删除。

多个还原步骤可以应用于属性的定义:

步骤1

public bool HasRange
{
get
{
return this.StartDate != null && this.EndDate != null;
}
}

步骤2

public bool HasRange
{
get => this.StartDate != null && this.EndDate != null;
}

步骤3

public bool HasRange => this.StartDate != null && this.EndDate != null;

您可以使用只读属性和getter,而不是使用必须调用才能工作的setter。在getter的代码中,检查其他属性的值,就可以开始了:

public bool HasRange
{
get => StartDate.HasValue && End date.HasValue;
}

每当请求HasRange的值时,都会根据其他属性对其进行评估,因此这些值不可能与不同步

最新更新