1

我有一个字符串属性,它定义了 xml 文件的文件名。当用户将此文件名输入到属性中时,我让 setter 在设置 'fileName = value' 后立即调用 parseXml() 函数以使用 XML 文件中的数据填充 dataTable 以便它显示在设计器中。出于某种原因,当我在属性设置器中调用此函数时,每次更改属性时,设置器最终都会被调用两次,第二次是空字符串,这会导致错误。为什么要这样做?

public String FileName
{
    get { return fileName; }
    set 
    {
        fileName = value;
        parseXmlFile();
    }
}
4

3 回答 3

9

我最初的猜测是 parseXml() 中的某些东西再次调用了该设置器。如果删除对 parseXml() 的调用会发生什么?您是否尝试过调试并在代码运行时单步执行以查看第二次调用 setter 的确切内容?

如果你打断点filename = value;并点击它,调用堆栈窗口会显示什么?

于 2009-11-04T20:31:22.717 回答
4

简短的回答:不应该。更有帮助:也许你自己引起了第二个电话?在设置器上设置调试器,第二次调用它时,检查调用堆栈。

于 2009-11-04T20:33:08.510 回答
0

除了您遇到的问题之外,将昂贵的 IO 操作放在属性设置器后面有点不平衡。

如果您想打开文件并解析内容等,最好有一个适当命名的单独方法来执行 IO 并在方法成功完成其工作时在最后设置此属性(文件名)。

于 2009-11-04T20:35:28.743 回答