我有一个dateTime字段,由datetimepicker编辑填充,格式很好,我需要使用不同的格式,所以我创建了一个新的字符串属性 并称之为。 在这里看起来如何;
public DateTime? birthDate_{ get; set; }
public string birthDate {
get {
return birthDate_!=null?birthDate_.Value.ToShortDateString():"";
}
set {
birthDate = value;
}
}
不知怎的,只要尝试返回此字符串属性(" birthDate"),它就会抛出
" StackOverflowException"
答案 0 :(得分:3)
这没有任何意义:
set { birthDate = value; }
birthDate
属性正试图将自己设置在自己的setter中。因此无限递归。
由于这是一个计算属性,它真的不应该拥有一个setter:
public string birthDate
{
get
{
return birthDate_!=null ?
birthDate_.Value.ToShortDateString() :
"";
}
}
或者,如果你想要它有一个setter,那个setter应该设置后备数据属性(birthDate_
)而不是设置它自己。这将涉及将传入的value
解析为DateTime
。
我怀疑这里混淆的根源来自于你的属性的命名和可见性。它们的名称看起来像私有成员变量,通常用于手动实现的属性。但它们实际上是公共财产。坚持既定的命名惯例,它确实变得更加清晰。
答案 1 :(得分:1)
正如@David所说:你的财产正试图将自己置于自己的制定者中。
您应该在birthDate:
的setter中设置私有属性private DateTime? _birthDate;
public string BirthDate { get { return birthDate_!=null?
birthDate_.Value.ToShortDateString():""; } set { _brithDate = Convert.ToDateTime(value); } }
我已将您的代码格式化为与C#编码指南相匹配