使用操作列表创建对象
本文关键字:创建对象 列表 操作 | 更新日期: 2023-09-27 18:31:59
目前我正在使用使用操作将一些方法调用作为字符串附加。如下所示:
var MyAction = new List<Action>();
MyAction.Add(() => this.FunctionA(new string[] { "All" }));
MyAction.Add(() => this.FunctionB(new string[] {"All"}));
MyAction.Add(() => this.FunctionC(new string[] {"-null-"}));
并迭代此操作以执行一些运行时处理:
foreach (var action in LoadDSAction)
{
action();
}
但是现在我必须使用相同的方法调用几个对象创建语句。例如:
ClssA objA = new ClsA();
ClssB objB = new ClsB();
ClssC objC = new ClsC();
如何将这些添加到操作中,以便我可以进一步迭代?
如果我明白你的意图,你需要使用返回一些数据的委托而不是Action
。 例如 Func<object>
:
var factories = new List<Func<object>>();
factories.Add(() => new ClsA());
factories.Add(() => new ClsB());
factories.Add(() => new ClsC());
然后,您可以在循环中创建对象:
foreach(var factory in factories)
{
var obj = factory();
//
}
如果 ClsA、ClsB、ClsC 继承了某个基类型,则可以将该类型用作 Func 泛型类型参数。
不确定您要实现的目标,但相同的模式肯定会起作用,即
public class ClssA{
private string id;
public ClssA(string id)
{
this.id = id;
System.Console.WriteLine("I'm {0}", id);
}
然后
MyAction.Add(() => new ClssA("One"));
MyAction.Add(() => new ClssA("Two"));
MyAction.Add(() => new ClssA("Three"));
foreach (var action in MyAction)
{
action();
}
将实例化您的类,如构造函数的输出所示:
我是一个我两个我三岁