将字符串数组分配给列表<myclass> </myclass>

时间:2011-01-18 05:01:55

标签: c# arrays list

运行此代码时,我遇到了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();
     }
 }

3 个答案:

答案 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; }以避免更多堆栈溢出。