是否可以在C#中添加文字代碼塊作爲事件處理程序?就像:C#添加事件處理程序文字代碼塊
Timer t = new Timer(1000);
t.Elapsed += new ElapsedEventHandler({ Console.WriteLine("Tick"); });
你可以在PowerShell中做到這一點,所以我認爲可能有一些方法在C#中做到這一點。
是否可以在C#中添加文字代碼塊作爲事件處理程序?就像:C#添加事件處理程序文字代碼塊
Timer t = new Timer(1000);
t.Elapsed += new ElapsedEventHandler({ Console.WriteLine("Tick"); });
你可以在PowerShell中做到這一點,所以我認爲可能有一些方法在C#中做到這一點。
您可以使用lambda表達式(C#3.0和更高版本):
t.Elapsed += (sender, args) => Console.WriteLine("Tick");
或匿名方法(C#2.0和更高):
// If you don't need the parameter values
t.Elapsed += delegate { Console.WriteLine("Tick"); };
// If you do need the parameter values
t.Elapsed += delegate(Object sender, ElapsedEventArgs args) {
Console.WriteLine("Tick from {0}", sender);
};
t.Elapsed += delegate(object sender, ElapsedEventArgs args)
{
Console.WriteLine["Tick"];
});
或者,你也可以使用lambda語法:
t.Elapsed += (sender, args) => { Console.WriteLine["Tick"]; };
這將不會工作 - 寫入 - 你需要遠程ve'()'否則它*需要*一個不帶參數的委託類型。 –
@Jon - 是的。意識到我發佈了兩個版本後。修正它們兩個。 –
有趣的是,不知道你可以用'delegate'語法省略參數聲明。 – Davy8
stackoverflow禮節:請問在這裏或在單獨的問題中,我該如何刪除匿名事件處理程序? –
@jmh_gr:搜索它,因爲它之前幾乎肯定被問過:)(但除此之外,請提出一個新問題......答案是您將它分配給一個變量,然後訂閱和取消訂閱相同的變量。) –