目前我正在使用action将一些方法调用附加为字符串。如下所示:
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();
}
但是现在我必须使用相同的方法调用一些对象创建语句。 e.g:
ClssA objA = new ClsA();
ClssB objB = new ClsB();
ClssC objC = new ClsC();
如何将这些添加到动作中以便我可以进一步迭代?
答案 0 :(得分: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泛型类型参数。
答案 1 :(得分: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();
}
将实例化您的类,如构造函数的输出所示:
I'm One I'm Two I'm Three