2
    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。请帮忙

4

1 回答 1

1

好的,您正在尝试的似乎是一个合理的想法,但是您不能ref从 lambdas 中为参数设置值。为什么?好吧,只要方法运行ref,参数就可以让您访问提供的变量。由于实际上无法知道 lambda 何时运行,因此不允许在其中写入此变量 - 这将成为对该变量进行无限制写入访问的后门。

可能的解决方案:

将签名更改为DataUpdater可以永久访问您的DataTable.

public DataUpdater(string file, Action<DataTable> setter);

通过调用此构造函数new DataUpdater(..., x => targetTable = x)并将 lambda 内的行更改为setter(CSVParser...);

我希望这是有道理的 ;)

于 2013-09-15T00:16:40.780 回答