Question

J'ai une propriété de chaîne qui définit un nom de fichier pour un fichier xml. Lorsque les entrées utilisateur ce nom de fichier dans la propriété, j'ai le poseur appelant une fonction parseXML () immédiatement après la mise en « fileName = valeur » pour remplir un DataTable avec les données du fichier XML de sorte qu'il affiche dans le concepteur. Pour une raison quelconque, quand j'ai cet appel de fonction dans le setter de propriété, le poseur finit par s'appelle chaque fois à chaque fois que je change la propriété, avec la 2ème fois étant une chaîne vide qui provoque une erreur. Pourquoi est-il fait cela?

public String FileName
{
    get { return fileName; }
    set 
    {
        fileName = value;
        parseXmlFile();
    }
}
Était-ce utile?

La solution

Réponse courte: il ne devrait pas. Plus utile: peut-être vous amener le second appel vous-même? Réglez le débogueur sur le compositeur et la deuxième fois qu'il est appelé, inspecter la pile d'appel.

Autres conseils

Mon estimation initiale serait que quelque chose dans parseXML () appelle à nouveau que setter. Qu'advient-il si vous supprimez l'appel à parseXML ()? Avez-vous essayé le débogage et parcourant le code tel qu'il est en cours d'exécution pour voir ce qui est exactement appelle le poseur la deuxième fois?

Si vous gifler un point d'arrêt sur filename = value; et il a frappé, qu'est-ce que le spectacle de la fenêtre callstack vous?

En tant que complète côté du problème que vous rencontrez, mettre des opérations coûteuses IO derrière setters de propriété est un peu détraqué off.

Si vous voulez ouvrir un fichier et d'analyser des choses, etc., il serait préférable d'avoir une méthode distincte nommée appropriée qui ne l'IO et définit cette propriété (nom de fichier) à la fin lorsque la méthode a réussi son travail.

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