.net C#{get;set;}对于不同类型的字段,stackoverflow异常
我有一个dateTime字段,由datetimepicker编辑并填充一些格式。很好,我需要使用不同的格式,所以我创建了一个新的字符串属性 就叫它吧。 这里是它的样子.net C#{get;set;}对于不同类型的字段,stackoverflow异常,.net,asp.net-mvc,.net,Asp.net Mvc,我有一个dateTime字段,由datetimepicker编辑并填充一些格式。很好,我需要使用不同的格式,所以我创建了一个新的字符串属性 就叫它吧。 这里是它的样子 public DateTime? birthDate_{ get; set; } public string birthDate { get { return birthDate_!=null?birthDate_.Value.ToShortDateString():""; } set {
public DateTime? birthDate_{ get; set; }
public string birthDate {
get {
return birthDate_!=null?birthDate_.Value.ToShortDateString():"";
}
set {
birthDate = value;
}
}
无论何时尝试返回这个字符串属性(“birthDate”),它都会抛出
“StackOverflowException”
这毫无意义:
set { birthDate = value; }
birthDate
属性正在尝试在其自己的setter中设置自身。因此是无限递归
因为这是一个计算属性,所以它实际上不应该有setter:
public string birthDate
{
get
{
return birthDate_!=null ?
birthDate_.Value.ToShortDateString() :
"";
}
}
或者,如果您希望它有一个setter,那么该setter应该设置备份数据属性(birthDate_uquo;
),而不是设置自身。这将涉及将传入的值
解析为日期时间
我怀疑这里混乱的根源来自于你财产的命名和可见性。它们的名称看起来像私有成员变量,通常在手动实现的属性中使用。但它们实际上是公共财产。坚持既定的命名约定,它确实会变得更加清晰。这毫无意义:
set { birthDate = value; }
birthDate
属性正在尝试在其自己的setter中设置自身。因此是无限递归
因为这是一个计算属性,所以它实际上不应该有setter:
public string birthDate
{
get
{
return birthDate_!=null ?
birthDate_.Value.ToShortDateString() :
"";
}
}
或者,如果您希望它有一个setter,那么该setter应该设置备份数据属性(birthDate_uquo;
),而不是设置自身。这将涉及将传入的值
解析为日期时间
我怀疑这里混乱的根源来自于你财产的命名和可见性。它们的名称看起来像私有成员变量,通常在手动实现的属性中使用。但它们实际上是公共财产。坚持既定的命名约定,它确实会变得更加清晰。正如@David所说:您的属性正试图在自己的setter中设置自己 您应该在生日设置器中设置私有属性:
private DateTime? _birthDate;
public string BirthDate { get { return birthDate_!=null?
birthDate_.Value.ToShortDateString():""; } set { _brithDate = Convert.ToDateTime(value); } }
我已将您的代码格式化为符合C#编码准则的格式,正如@David所说:您的属性正试图在自己的setter中设置自身 您应该在生日设置器中设置私有属性:
private DateTime? _birthDate;
public string BirthDate { get { return birthDate_!=null?
birthDate_.Value.ToShortDateString():""; } set { _brithDate = Convert.ToDateTime(value); } }
我已将您的代码格式化为符合C#编码准则
设置{birthDate=value;}
-您的属性正在尝试在其自己的setter中设置自身。有一个很好的理由应用。设置{birthDate=value;}
-您的属性正在尝试在其自己的setter中设置自身。有一个很好的理由应用。是的,事实上,我理解它为什么抛出这个异常,但是删除setter使它正常工作,谢谢你,事实上我理解它为什么抛出这个异常,但是删除setter使它正常工作,谢谢