Question

J'ai une propriété publique définie dans mon formulaire de type ListE<T> où:

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

Oui, c'est une bouchée, mais c'est ce que le concepteur a besoin pour qu'il apparaisse comme une collection modifiable dans la fenêtre Propriétés. Ce qu'il fait! Je clique donc sur le petit bouton [..] pour modifier la collection, puis sur Ajouter pour ajouter un élément à la collection.

  

Une opération arithmétique a entraîné un débordement.

Maintenant, ceci est une liste très basique, un peu plus qu'un tableau en expansion. La seule partie qui se rapproche de l'arithmétique dans tout cela se trouve dans la fonction expand, et même qui utilise un décalage à gauche plutôt qu'une multiplication, pour ne pas déborder. Tout cela me fait penser que cette exception est générée dans le concepteur, peut-être à cause d'une inattention minime de ma part concernant les détails d'implémentation, mais je ne trouve pas le moyen de tester ou de déboguer ce scénario. Quelqu'un a-t-il des idées intelligentes?

EDIT: Oui, je peux utiliser la propriété avec succès, même manuellement, c.-à-d. dans le OnLoad gestionnaire, et je suppose que c’est à cela que je devrai recourir si je ne parviens pas à faire fonctionner cela, mais ce ne serait pas idéal. : (

Était-ce utile?

La solution

Je ne comprends pas ce qui vous motive à tenter de réinventer la liste < T > molette de cette façon, mais pour répondre à votre question: j'ajouterais une ligne & "System.Diagnostics.Debugger.Break () &"; au constructeur de votre classe.

Ensuite, essayez de l'utiliser dans le concepteur et vous obtiendrez une fenêtre contextuelle vous demandant si vous souhaitez attacher un débogueur. Associez une deuxième instance de Visual Studio en tant que débogueur et vous pourrez définir des points d'arrêt dans votre code et lancer le débogage.

Autres conseils

Un point de départ serait qu’il soit possible de faire des calculs avec votre propriété ListE`1 :: Count. Si cela présente un défaut subtil (c’est-à-dire qu’il est plus compliqué que de renvoyer this.innerList.Count), le concepteur risque de provoquer un dépassement arithmétique lors de certaines opérations. Normalement, il n’ya pas de débordement arithmétique à moins d’être spécifiquement invité à utiliser

checked
{
   // ...
}

syntaxe.

Vous n'êtes pas obligé d'ajouter le débogueur.Break (); appelez votre code pour le déboguer. Vous pouvez simplement ouvrir une instance différente de VS et l'attacher à celle dans laquelle vous l'utilisez. Vous devriez pouvoir le déboguer sans problèmes (assurez-vous simplement que les symboles sont chargés).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top