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();
    }
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top