Domanda

Ho una proprietà pubblica impostata nella mia forma di tipo ListE<T> dove:

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

Sì, è un boccone, ma è quello che richiede il Designer per mostrarlo come una raccolta modificabile nella finestra Proprietà. Che fa! Quindi, faccio clic sul piccolo pulsante [..] per modificare la raccolta, quindi fare clic su Aggiungi per aggiungere un elemento alla raccolta.

  

L'operazione aritmetica ha provocato un overflow.

Ora, questo è un elenco molto semplice, poco più di un array in espansione. L'unica parte che si avvicina all'aritmetica nel tutto è nella funzione di espansione, e anche quella utilizza uno spostamento a sinistra anziché una moltiplicazione, in modo che non trabocchi. Tutto ciò mi fa pensare che questa eccezione sia stata sollevata all'interno del Designer, forse a causa di una piccola disattenzione ai dettagli di implementazione da parte mia, ma non riesco a trovare un modo per testare o eseguire il debug di tale scenario. Qualcuno ha qualche idea intelligente?

EDIT: Sì, posso usare la proprietà con successo, anche manualmente, vale a dire. nel gestore OnLoad e suppongo che sia quello a cui dovrò ricorrere se non riesco a farlo funzionare, ma non sarebbe l'ideale. : (

È stato utile?

Soluzione

Non riesco a capire cosa ti motiva a tentare di reinventare la Lista < T > ruota in quel modo, ma per rispondere alla tua domanda: aggiungerei una riga " System.Diagnostics.Debugger.Break () " al costruttore della tua classe.

Quindi prova a usarlo nel designer e otterrai un popup che ti chiederà se vuoi collegare un debugger. Collega una seconda istanza di Visual Studio come debugger e sarai in grado di impostare alcuni punti di interruzione nel codice e iniziare il debug.

Altri suggerimenti

Un punto di partenza sarebbe che potrebbe fare matematica con la proprietà ListE`1 :: Count. Se ciò presenta un difetto impercettibile (ovvero è più complicato che restituire this.innerList.Count), potrebbe causare l'overflow aritmetico del progettista in alcune operazioni. Normalmente non si verificano overflow aritmetici se non specificamente richiesto di utilizzare

checked
{
   // ...
}

sintassi.

Non è necessario aggiungere Debugger.Break (); chiama il tuo codice per eseguirne il debug. Puoi semplicemente aprire una diversa istanza di VS e collegarti a quella in cui la stai utilizzando e dovresti essere in grado di eseguire il debug senza problemi (assicurati solo di avere i simboli caricati).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top