我有如下所示的结构体,当我进行初始化时:
ArrayList nodesMatrix = null;
List<vertex> vertexMatrix = null;
List<bool> odwiedzone = null;
List<element> priorityQueue = null;
vertexMatrix = new List<vertex>(nodesNr + 1);
nodesMatrix = new ArrayList(nodesNr + 1);
odwiedzone = new List<bool>(nodesNr + 1);
priorityQueue = new List<element>();
arr.NodesMatrix = nodesMatrix;
arr.VertexMatrix = vertexMatrix;
arr.Odwiedzone = odwiedzone;
arr.PriorityQueue = priorityQueue; //only here i have exception
调试器触发进程是因为StackOverflowException :/知道为什么这个集合触发这个异常?
private struct arrays
{
ArrayList nodesMatrix;
public ArrayList NodesMatrix
{
get { return nodesMatrix; }
set { nodesMatrix = value; }
}
List<vertex> vertexMatrix;
public List<vertex> VertexMatrix
{
get { return vertexMatrix; }
set { vertexMatrix = value; }
}
List<bool> odwiedzone;
public List<bool> Odwiedzone
{
get { return odwiedzone; }
set { odwiedzone = value; }
}
public List<element> PriorityQueue
{
get { return PriorityQueue; }
set { PriorityQueue = value; }
}
}
public struct element : IComparable
{
public double priority
{
get { return priority; }
set { priority = value; }
}
public int node
{
get { return node; }
set { node = value; }
}
public element(double _prio, int _node)
{
priority = _prio;
node = _node;
}
#region IComparable Members
public int CompareTo(object obj)
{
element elem = (element)obj;
return priority.CompareTo(elem.priority);
}
#endregion
发布于 2010-03-24 12:43:58
您的PriorityQueue
属性正在引用自身。
您需要更改访问器以使用字段。
List<element> priorityQueue;
public List<element> PriorityQueue
{
get { return priorityQueue; }
set { priorityQueue = value; }
}
但是,您应该使用自动实现的属性来代替:
public List<element> PriorityQueue { get; set; }
发布于 2010-03-24 12:45:31
属性设置器是递归的。
public List<element> PriorityQueue
{
get { return PriorityQueue; }
set { PriorityQueue = value; }
}
将其改为:
public List<element> PriorityQueue
{
get { return priorityQueue; }
set { priorityQueue = value; }
}
https://stackoverflow.com/questions/2511240
复制