【问题标题】:StackoverflowException in list列表中的 StackoverflowException
【发布时间】:2014-04-19 18:03:09
【问题描述】:

这段代码有什么问题?我不断收到StackOverlflowException..

public class Places
{
    public string Title { get; set; }
    public string Content { get; set; }
    public double Latitude { get; set; }
    public double Longtitude { get; set; }    


    public List<Places> allPlaces = new List<Places>
    {
        new Places { Title = "test", Content = "test\ntest", Latitude = 52.23057, Longtitude = 5.84582 },
        new Places { Title = "testt", Content = "dfsdf", Longtitude = 52.35589, Latitude = 4.92119 }
    };
}

【问题讨论】:

  • 在实例化 allPlaces 时有一个递归。 allPlaces 在创建 allPlaces 时创建。
  • 感谢您的快速回复,但我不太明白。我该如何解决这个问题?

标签: c# list class infinite-loop stack-overflow


【解决方案1】:

由于allPlaces 是一个实例字段,它在Places 对象的构造过程中被初始化。因此,您创建了一个 Places 对象,该对象创建了一个 List&lt;Places&gt;,该对象在其集合初始化程序中创建了另一个 Places 对象,该对象创建了另一个自己的 List&lt;Places&gt;... 一个永无止境的递归。

您可能想要创建一个静态的allPlaces 字段,它只会创建一个列表。在字段中添加static关键字如下:

public static List<Places> allPlaces = ...

【讨论】:

  • 这不是一个选项,因为我想在另一个类中使用该列表。
  • @user3478148:请详细说明您要完成的工作。如果您提供的信息如此之少,很难为您提供帮助。否则我们只能像我在这里所做的那样进行猜测。
  • 我明白了,对不起。我正在尝试在名为 Places.cs 的类中设置一个列表。然后我尝试使用以下代码在另一个类中接收此类列表中的信息:Places places = new Places(); foreach (var place in places.allPlaces) { string test = place.Content; }
  • @user3478148:使用我在回答中建议的静态字段,您可以在代码中的任何位置(来自任何类)执行以下操作:foreach (var place in Places.allPlaces)。注意Places 中的大写 P,它表示类名,而不是类的实例。使用类型名称允许访问静态成员。在 Static Members 部分下阅读更多相关信息here
  • 哦,我明白了!我现在明白了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多