在 wcfserviceLibrary.DLL 中发生类型为“System.StackOverflowException”的未处理异常
代码如下。
[DataContract]
public class memberdesignations
{
[DataMember]
public string DesigId
{
get { return DesigId; }
set { DesigId = value;}
}
[DataMember]
public string DesignationName
{
get { return DesignationName; }
set { DesignationName = value; }
}
}
然后我有如下的 Type memberdesignations 方法
public List<memberdesignations> memberdesignations()
{
List<memberdesignations> designations = new List<memberdesignations>();
memberdesignations objmemDesignations;
ds = objbll.Get_Member_Designations();
DataView dv = new DataView();
dv = ds.Tables[0].DefaultView;
foreach (DataRowView drow in dv)
{
objmemDesignations = new memberdesignations();
objmemDesignations.DesigId = drow["DesignationId"].ToString();
objmemDesignations.DesignationName = drow["DesignationName"].ToString();
designations.Add(objmemDesignations);
}
return designations;
}
我在包含获取设置属性的类中遇到错误。
但是当我像这样修改类时我能够摆脱错误:
[DataContract]
public class memberdesignations
{
[DataMember]
public string DesigId
{
get; set;
}
[DataMember]
public string DesignationName
{
get; set;
}
}
在搜索论坛时,我找到了原因并由 Konamiman 解释 here
我想知道 Konamiman 解释的两种不同的属性方式之间的区别
或任何其他解释将不胜感激。
谢谢
最佳答案
问题是,正如 Konamiman 所说,您正在递归调用属性。
假设我有一个字符串属性“DesignationName”。
public string DesignationName
{
//Some getter to return some data
//Some setter to set the data
}
您希望它返回什么?如何返回一个硬编码字符串 _designationName;
private string _designationName = "someName";
public string DesignationName
{
get {return _designationName;}
//Some setter to set the data
}
行得通。但是,如果我让它自己返回,会发生什么情况呢?
public string DesignationName
{
get {return DesignatioName;}
//Some setter to set the data
}
好吧,它会继续调用 DesignationName,它会继续再次调用它自己,它会再次调用 DesignationName...等等。所有这些都将数据放在堆栈上,并一直持续下去,直到超出为堆栈分配的空间。瞧,stackoverflow。
您的最后一个示例之所以有效,是因为它使用了所谓的“自动属性”,这是 .NET 3.0 的一项新功能。基本上,它在幕后为您的属性创建支持字段,以便:
public string DesignationName
{
get;
set;
}
实际上编译后的行为是这样的:
private string _designationName = string.Empty;
public string DesignationName
{
get { return _designationName; }
set { _designationName = value; }
}
关于c# - System.StackOverflowException ,何时使用 get set 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9798697/