J'essaie de savoir pourquoi j'obtiens une exception de dépassement de pile. Je crée un jeu de cartes simple pour une tâche d'école et quand je clone les cartes pour les retourner, j'obtiens l'exception de dépassement de pile.Débordement de pile C#
donc je suis arrivé cette classe de carte:
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
}
et j'ai une classe appelée Hand
qui clone alors les cartes:
internal class Hand
{
internal List<Card> GetCards()
{
return m_Cards.CloneList<Card>(); // m_Cards is a List with card objects
}
}
dernier, je suis arrivé une méthode d'extension pour la List
:
public static List<T> CloneList<T>(this List<T> listToClone) where T : ICloneable
{
return listToClone.Select(item => (T)item.Clone()).ToList();
}
méthode onable),
Une exception non gérée du type 'System.StackOverflowException' a eu lieu dans CardLibrary.dll
Est-ce que les cartes doivent être mutable dire qu'ils n'ont l'état qui peut changer? Sinon, vous pourriez simplement avoir un ensemble de cartes immuables que vous pourriez réutiliser dans différentes collections. Aucun clonage nécessaire. – pjp
S'il vous plaît voir aussi cette discussion concernant ICloneable: http://stackoverflow.com/questions/699210/why-should-i-implement-icloneable-in-c – peterchen
Après avoir lu le titre de cette question, je pensais que cela appartient à méta. .. ;-) – EricSchaefer