Domanda

Ho una proprietà stringa che definisce un nome di file per un file XML. Quando l'utente immette questo nome di file nella proprietà, ho il setter chiamare una funzione parseXML () subito dopo aver impostato 'nomefile = valore' per popolare un DataTable con i dati del file XML in modo da visualizzare nella finestra di progettazione. Per qualche ragione, quando ho questa funzione chiamata nel setter di proprietà, il setter finisce per ottenere chiamato ogni due volte ogni volta che cambio la proprietà, con il 2 ° tempo di essere una stringa vuota che causa un errore. Perché si fa questo?

public String FileName
{
    get { return fileName; }
    set 
    {
        fileName = value;
        parseXmlFile();
    }
}
È stato utile?

Soluzione

Risposta breve: non dovrebbe. Più utile: forse si causa la seconda chiamata da soli? Impostare il debugger sul setter e la seconda volta che viene chiamata, controllare lo stack di chiamate.

Altri suggerimenti

La mia ipotesi iniziale è che qualcosa in parseXML () è chiamata ancora una volta che setter. Che cosa succede se si rimuove la chiamata a parseXML ()? Hai provato il debug e passando attraverso il codice come è in esecuzione per vedere che cosa esattamente sta chiamando il setter la seconda volta?

Se si schiaffo un punto di interruzione filename = value; e ha colpito, che cosa fa il finestra di esposizione stack voi?

Come un completo da parte per il problema che stai avendo, mettendo costose operazioni di IO dietro setter di proprietà è un po 'venendo meno fuori.

Se si vuole aprire un file e l'analizza roba ecc sarebbe meglio avere un metodo separato chiamato in modo appropriato ciò l'IO e set di questa struttura (nome del file) alla fine quando il metodo completato con successo il suo lavoro.

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