[英]How to create a list of methods then execute them?
我正在嘗試創建一個包含方法的列表,在添加一些方法后我想執行它們,這可能嗎?
我試過這樣的事情:
List<object> methods = new List<object>();
然后:
methods.Add(Move());
但是當我添加時,程序會調用方法,例如,在這種情況下它調用了Move();
這是Action
通用委托的一個很好的用例。
List<Action> functions = new List<Action>();
functions.Add(Move);
foreach (Action func in functions)
func();
如果你需要參數,我會使用 lambdas 來抽象它們:
List<Action> functions = new List<Action>();
functions.Add(Move);
functions.Add(() => MoveTo(1, 5));
foreach (Action func in functions)
func();
委托類似於 C++ 中的函數指針,它保存函數“是什么”(不是您示例中的返回值),因此您可以像常規函數一樣調用它。 Action 泛型委托不接受任何參數也不返回任何內容,因此它是泛型“調用這些函數”的理想選擇。
MSDN for Action: 動作委托
有關 .NET 提供的不同類型委托的更多信息: https ://stackoverflow.com/a/567223/1783619
我不確定這是否超出了原始問題的范圍(或者會幫助其他人),但我一直回到這個頁面,以自己搜索如何創建一個返回類型函數列表來迭代和執行。 我最終使用List<Func<T>>
來創建類型方法列表-
bool RTrue()
{
Console.WriteLine("RETURNS TRUE");
return true;
}
bool RFalse()
{
Console.WriteLine("RETURNS FALSE");
return false;
}
List<Func<Boolean>> functions = new List<Func<Boolean>>();
functions.Add(RTrue);
functions.Add(RFalse);
foreach (Func<Boolean> func in functions)
{
if (func() == true)
{
Console.WriteLine("IT WORKS");
}
}
有關 Func 用法的更多信息 - Func 是什么,如何以及何時使用
您可以使用委托。 創建代表列表。 然后,對於要添加到列表中的每個方法,創建一個委托並將其添加到列表中。
List<Delegate> methods = new List<Delegate>();
// creates an Action delegate implicitly
methods.Add((Action)Move);
根據需要的參數:
var Actions = new List<Action<object, EventArgs>>
{
ReconfirmOrderlines_Click,
ModifyOrderlines_Click
};
或者,例如,當您想要創建一個列表以使用文本和 Click 事件在 ContextMenuStrip 中動態添加項目時:
var actions = new List<(string, Action<object, EventArgs>)>
{
("Send confirmation", ReconfirmOrderlines_Click),
("Send modification", ModifyOrderlines_Click),
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.