An unhandled exception of type ‘System.StackOverflowException’ occurred in wcfserviceLibrary.DLL
the code is show as follows.
[DataContract]
public class memberdesignations
{
[DataMember]
public string DesigId
{
get { return DesigId; }
set { DesigId = value;}
}
[DataMember]
public string DesignationName
{
get { return DesignationName; }
set { DesignationName = value; }
}
}
then i have method of Type memberdesignations as follows
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;
}
iam getting the error in the class containing the get set properties.
But i was able to get rid of the error when i modified the class like this :
[DataContract]
public class memberdesignations
{
[DataMember]
public string DesigId
{
get; set;
}
[DataMember]
public string DesignationName
{
get; set;
}
}
On searching the forum , i found the cause for it was and explained by Konamiman
here
i would like to know the difference between the two different ways for properties explained by Konamiman
or any other explanation would be appreciated.
Thanks
The issue is that, as Konamiman said, you are calling a property recursively.
Let’s say I have a string property “DesignationName”.
What would you expect it to return? How about returning a hard-coded string _designationName;
That works. But what would happen if I had it return itself,instead?
Well, it would keep calling DesignationName, which would keep calling itself again, which would again call DesignationName…and so on. All of this puts data on the stack, and goes on forever until is overruns the allocated space for the stack. Voila, a stackoverflow.
The reason your last example works is because it is using what is called an ‘autoproperty’, a new feature to .NET 3.0. Basically, behind the scenes, it is creating backing fields for your properties so that this:
actually compiles to behave like this: