.net C#{get;set;}对于不同类型的字段,stackoverflow异常

.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 {

我有一个dateTime字段,由datetimepicker编辑并填充一些格式。很好,我需要使用不同的格式,所以我创建了一个新的字符串属性 就叫它吧。 这里是它的样子

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使它正常工作,谢谢