运行此代码时,我遇到了Stackoverflow
class Students
{
public int SID { get { return SID; } set { SID = value; } }
public string SName { get { return SName; } set { SName = value; } }
}
问题出在foreach(名称中的字符串)中。我无法将字符串数组存储到我的数据结构中 提前谢谢
class Program
{
static void Main(string[] args)
{
List<Students> sList = new List<Students>();
string[] names = new string[5] {"Matt", "Joanne", "Robert"};
System.Console.WriteLine("{0} words in text:", names.Length);
foreach (string s in names)
{
Students st = new Students();
st.SName = s;
sList.Add(st);
System.Console.WriteLine("test{0}",s);
}
foreach (Students sn in sList) Console.WriteLine(sn);
Console.ReadLine();
}
}
答案 0 :(得分:6)
public int SID
{
get
{
//here you try to return SID, again the "get" method is called
//hence the StackOverflowException
return SID;
}
set
{
//same issue here
SID = value;
}
}
将您的代码更改为:
public int SID { get; set; }
或使用字段:
private int _SID;
public int SID
{
get
{
return _SID;
}
set
{
_SID = value;
}
}
答案 1 :(得分:1)
public int SID { get { return SID; } set { SID = value; } }
想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么? 想一想那里发生了什么?
答案 2 :(得分:0)
SID属性不是问题,因为它永远不会被您的代码调用。 SName属性是导致堆栈溢出的属性。将其更改为
public string SName { get; set; }
所以它不引用自己。
names
声明为string[5]
,但仅使用3个名称进行初始化。将其更改为string[3]
或添加两个名称。
您还会发现Console.WriteLine(sn);
为每个学生输出相同的班级名称 AppName.Students ,而不是有用的学生信息。通过在学生班上添加类似的东西来解决这个问题
public override string ToString() { return SID + " " + SName; }
这将覆盖作为每个.NET对象一部分的默认ToString方法,并显示您指定的任何内容。要使此示例正常工作,您还需要将SID属性更新为public string SID { get; set; }
以避免更多堆栈溢出。