【发布时间】:2019-11-11 03:51:26
【问题描述】:
我的应用程序中的用户可以决定对对象集合执行哪些活动以及以什么顺序执行。为所有对象在开头(一次)设置顺序。
应用程序应以正确的顺序执行用户选择的方法。
例如我已经定义了动作列表:
this.ActionsList = new List<MyAction>
{
new MyAction {Id = "123", Order = 1, Text = "Method 5", IsActive = true},
new MyAction {Id = "abc", Order = 5, Text = "Method 1", IsActive = false},
new MyAction {Id = "def", Order = 3, Text = "Method 3", IsActive = true}
};
我还有一个对象集合:
var myObjects = new List<MyObjects>();
现在,对于集合中的每个对象,程序必须调用与激活的操作相关的方法。定义的操作定义将调用哪个方法。
foreach (var o in myObjects){
var actions = ActionsList.Where(x => x.IsActive).OrderBy(x => x.Order);
foreach (var a in ActionsList){
switch(a.Id){
case "123":
o.Method5();
break;
case "abc":
o.Method1();
break;
// etc...
}
}
}
请忽略任何不准确之处。
此解决方案有效。但是,“切换”指令非常大。我有几十个这样的动作。这可能不是最好的解决方案。
我认为最好的解决方案是为每个对象“MyAction”指明适当的方法(委托):
new MyAction {Id = "def", Order = 3, Text = "Method 3", IsActive = true,
MethodToCallDelegate = Method3}
我不知道如何实现它(或类似的解决方案)。 我希望我的代码在以后的版本中透明且简单。
【问题讨论】:
-
你考虑过将动作集合做成字典吗?
-
你的想法是正确的,它会消除switch语句。将
Action MethodToCallDelegate;成员添加到MyAction并将其设置为不同的方法,例如Method3。见Action。
标签: c# collections foreach