我试图找出为什么我得到一个堆栈溢出异常。我正在为学校作业创建一个简单的纸牌游戏,当我克隆纸牌以将其退还时,我会得到堆栈溢出异常。
所以我得到了这个卡类:
public class Card : ICloneable
{
....
#region ICloneable Members
public object Clone()
{
return this.Clone(); // <--- here is the error thrown when the first card is to be cloned
}
#endregion
}
并且我有一个名为
Hand
的类,该类随后将卡克隆:internal class Hand
{
internal List<Card> GetCards()
{
return m_Cards.CloneList<Card>(); // m_Cards is a List with card objects
}
}
最后,我得到了
List
的扩展方法: public static List<T> CloneList<T>(this List<T> listToClone) where T : ICloneable
{
return listToClone.Select(item => (T)item.Clone()).ToList();
}
该错误会在卡片类中抛出(IClonable方法),
CardLibrary.dll中发生了'System.StackOverflowException'类型的未处理异常
最佳答案
您在自称:
public object Clone()
{
return this.Clone();
}
这导致无限递归。
您的Clone()方法应将所有属性/字段复制到新对象:
public object Clone()
{
Card newCard = new Card();
newCard.X = this.X;
// ...
return newCard;
}
或者您可以使用MemberwiseClone()
public object Clone()
{
return MemberwiseClone();
}
但这使您对克隆过程的控制较少。
关于c# - C#堆栈溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1198990/