使用操作列表创建对象

本文关键字:创建对象 列表 操作 | 更新日期: 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();
}

将实例化您的类,如构造函数的输出所示:

我是一个我两个我三岁