public DataUpdater(string file, ref DataTable data)
{
FileSystemWatcher fileWatcher = new FileSystemWatcher();
fileWatcher.Path = Path.GetDirectoryName(file);
fileWatcher.Filter = Path.GetFileName(file);
fileWatcher.NotifyFilter = NotifyFilters.LastWrite;
fileWatcher.Changed += (sender, e) =>
{
data = CSVParser.ParseCSV(file);
};
}
您好,我试图在文件更改时尝试更新数据表变量,但输出显示我无法在更改的事件中使用ref或out。请帮忙
答案 0 :(得分:1)
好的,你正在尝试看起来是一个合理的想法,但你不能从lambdas中设置ref
参数的值。为什么?好吧,只要方法运行,ref
参数就可以让您访问提供的变量。事实上,由于无法知道lambda何时运行,因此不允许在其中写入此变量 - 这将是对该变量进行无限写入访问的后门。
可能的解决方案:
将DataUpdater
的签名更改为可永久访问DataTable
的内容。
public DataUpdater(string file, Action<DataTable> setter);
通过new DataUpdater(..., x => targetTable = x)
调用此构造函数,并将lambda中的行更改为setter(CSVParser...);
我希望这是有道理的;)