我的代码中出现此错误



这是我的代码的片段,错误是从哪里来的。它在带有错误的零件上给出一个黄色箭头。

显示错误的部分以粗体显示。任何帮助将不胜感激谢谢

private string _TestNo;
private string _TestType;
private DateTime _TestDate;
private string _PatientNo;
private string _DoctorNo;

public Test()
{
    _TestNo = "";
    _TestType = "";
    _TestDate = new DateTime();
    _PatientNo = "";
    _DoctorNo = "";
}

public Test(string aTestNo, string aTestType, DateTime aTestDate, string aPatientNo, string aDoctorNo)
{
    _TestNo = aTestNo;
    _TestType = aTestType;
    _PatientNo = aPatientNo;
    _DoctorNo = aDoctorNo;
}

public string TestNo
{
    set { _TestNo = value; }
    get { return (TestNo); }
}

public string TestType
{
    set { _TestType = value; }
    **get { return (TestType); }
}

public DateTime TestDate
{
    set { _TestDate = value; }
    get { return (TestDate); }
}

public string PatientNo
{
    set { _PatientNo = value; }
    get { return (PatientNo); }
}

public string DoctorNo
{
    set { _DoctorNo= value; }
    get { return (DoctorNo); }
}

最佳答案

您所有的属性 getter 都将返回属性本身,而不是带下划线前缀的字段名称。

public string TestType
{
    set { _TestType = value; }
    get { return (TestType); }
}

而不是return _TestType,而是执行return TestType,因此属性getter会不断地访问自身,从而导致无限递归并最终导致调用堆栈溢出。

另外,返回值不一定需要括号(除非您要评估某个复杂的表达式,在这种情况下您不需要)。

更改您的 setter/getter ,改为返回下划线前缀的字段(对所有属性执行此操作):
public string TestType
{
    set { _TestType = value; }
    get { return _TestType; }
}

如果您使用的是C#3.0,也可以像其他人建议的那样将它们设置为automatic properties

关于c# - 未处理StackOverflowException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5676430/

10-13 06:57