如何解决字段初始化程序无法引用EventHandler中的非静态字段,方法或属性
我在行上收到以下错误(字段初始化程序无法引用EventHandler中的非静态字段,方法或属性):
FilesFound = FilesFound + 1;
任何人都知道为什么以及如何解决?
public class FileSearcher
{
public event EventHandler<FileFoundArgs> FileFound;
public int FilesFound { get; set; } = 0;
EventHandler<FileFoundArgs> onFileFound = (sender,eventArgs) =>
{
Console.WriteLine(eventArgs.FoundFile);
FilesFound = FilesFound + 1;
};
public FileSearcher()
{
FileFound += onFileFound;
}
public void Search(string directory,string searchPattern)
{
foreach (var file in Directory.EnumerateFiles(directory,searchPattern))
{
FileFound?.Invoke(this,new FileFoundArgs(file));
}
}
}
谢谢
解决方法
错误消息确切说明了问题所在-您的字段初始化器正在通过lambda表达式使用实例成员(FilesFound
)。您不能在实例字段初始化程序中引用其他实例成员。
简单的解决方法是将初始化移至构造函数:
private EventHandler<FileFoundArgs> onFileFound;
public FileSearcher()
{
onFileFound = (sender,eventArgs) =>
{
Console.WriteLine(eventArgs.FoundFile);
FilesFound = FilesFound + 1;
};
FileFound += onFileFound;
}
或者,如果您不打算在其他任何地方使用onFileFound
,请完全放弃它作为一个字段,而直接在构造函数中订阅该事件:
private EventHandler<FileFoundArgs> onFileFound;
public FileSearcher()
{
FileFound += (sender,eventArgs) =>
{
Console.WriteLine(eventArgs.FoundFile);
FilesFound = FilesFound + 1;
};
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。