簡體   English   中英

如何在靜態事件處理程序中訪問非靜態成員?

[英]How can I access a non-static member in a static event handler?

我已經知道您通常無法執行此操作,但這是我的情況:

我有一個非靜態的List<T> ,在正常使用期間會添加到該List<T> ,然后每隔一段時間就轉儲到數據庫中。 我希望能夠使用AppDomain.CurrentDomain.ProcessExit來轉儲List<T>中尚未轉儲的任何值。 List在每次轉儲時都會清除。

即使List是靜態的->非靜態的,我也可以在沒有給定上下文的情況下訪問此List嗎?

只需將您的處理程序添加為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);
        };
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM