C #: método chamando problema dentro de um setter propriedade de cadeia
-
16-09-2019 - |
Pergunta
Eu tenho uma propriedade string que define um nome de arquivo para um arquivo xml. Quando as entradas do usuário Esse nome de arquivo para a propriedade, tenho o setter chamar uma função parseXML () imediatamente após a definição 'filename = value' para preencher um dataTable com os dados do arquivo XML para que ele exibe no designer. Por alguma razão, quando eu tenho essa função chamada no setter propriedade, o setter acaba sendo chamado a cada duas vezes cada vez que alterar a propriedade, com o segundo tempo sendo uma string vazia que faz com que um erro. Por que ele está fazendo isso?
public String FileName
{
get { return fileName; }
set
{
fileName = value;
parseXmlFile();
}
}
Solução
Resposta curta: não deveria. Mais útil: talvez você fazer com que a segunda chamada a si mesmo? Defina o depurador no setter e a segunda vez que ele é chamado, inspecionar a pilha de chamadas.
Outras dicas
Meu palpite inicial seria que algo em parseXML () está chamando que setter novamente. O que acontece se você remover a chamada para parseXML ()? Você já tentou de depuração e percorrendo o código como ele está sendo executado para ver o que exatamente está chamando o setter pela segunda vez?
Se você bater um ponto de interrupção filename = value;
e batê-lo, o que é que a janela de pilha de chamadas mostrar-lhe?
Como uma completa lado para o problema que você está tendo, colocando operações de IO caras por trás setters de propriedade é um pouco fora de ordem.
Se você quiser abrir um arquivo e material de análise etc seria melhor ter um método separado chamado apropriadamente que faz o IO e define essa propriedade (filename), no final quando o método foi concluído com êxito o seu trabalho.