1

目前我正在使用操作将一些方法调用附加为字符串。如下所示:

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();

如何将这些添加到操作中以便我可以进一步迭代?

4

2 回答 2

0

如果我明白了你的意图,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 泛型类型参数。

于 2013-09-18T11:58:46.593 回答
0

不完全确定您要达到的目标,但相同的模式肯定会起作用,即

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();
}

将实例化您的类,正如构造函数的输出所证明的那样:

我是一个
我是二
我三岁
于 2013-09-18T12:07:34.830 回答