我有一个字符串属性,用于定义xml文件的文件名。当用户将此文件名输入到属性中时,我在设置'fileName = value'后立即调用parseXml()函数,以使用XML文件中的数据填充dataTable,以便在设计器中显示。出于某种原因,当我在属性设置器中调用此函数时,每次更改属性时,setter最终会每次调用两次,第二次是空字符串,这会导致错误。为什么要这样做?
public String FileName
{
get { return fileName; }
set
{
fileName = value;
parseXmlFile();
}
}
答案 0 :(得分:9)
我最初的猜测是parseXml()中的某些内容再次调用该setter。如果删除对parseXml()的调用会发生什么?您是否尝试过调试并逐步执行代码,以查看第二次调用setter的确切内容?
如果你在filename = value;
上打了一个断点并点击它,那么callstack窗口会显示什么?
答案 1 :(得分:4)
简短回答:不应该。 更有帮助:也许你自己做第二次电话?在setter上设置调试器,第二次调用它,检查调用堆栈。
答案 2 :(得分:0)
作为您所遇到的问题的一个完整之处,将昂贵的IO操作置于物业设置者后面是有点不对。
如果你想打开一个文件并解析东西等,最好有一个适当的单独方法来做IO,并在方法成功完成它的工作时设置这个属性(filename)。