如何在静态事件处理程序中访问非静态成员?

时间:2016-04-18 20:31:29

标签: c# static-members process-exit

我已经知道你通常不会这样做,但这是我的情况:

我有一个非静态List<T>在正常使用期间被添加,然后以一定间隔转储到数据库。我希望能够使用AppDomain.CurrentDomain.ProcessExit转储我尚未转储的List<T>中的任何值。每次转储时List都会被清除。

有没有办法在没有给定上下文的情况下访问此List,即使它是静态的 - &gt;不静电?

1 个答案:

答案 0 :(得分:1)

只需将处理程序作为lambda添加到可以访问列表的范围内。

var list = new List<string>()
{
    "Item 1",
    "Item 2"
};

AppDomain.CurrentDomain.ProcessExit += (sender, theArgs) =>
{
    File.WriteAllLines(@"C:\temp\mylist.txt", list);
};

一种不错的方法是将此行为封装在List<T>的子类中。

public class MyReallyPersistentList<T> : List<T>
{
    public MyReallyPersistentList()
    {
        AppDomain.CurrentDomain.ProcessExit += (sender, args) => 
        {
            var items = this.Select(i => i?.ToString());
            File.AppendAllLines(@"C:\temp\mylist.txt", items);
        };
    }
}