如何根据布尔值对类内部的方法调用进行排序



在一个类中,我有3个私有方法(两个空方法和一个返回id的方法(。。根据布尔变量,我需要按特定顺序调用这些方法。

我可以简单地做:

if(booleanIstrue){ 
var id = method1(); 
method2(); method3(); 
} else { 
method2(); 
method3(); 
id = method1(); 
}

但是有更好的方法吗?

如果调用的顺序很重要,我假设这些方法不是幂等的。我会写这样的东西。

type id; // declare id with a proper type
if (boolean) id = method1();
method2();
method3();
if (!boolean) id = method1();

如果method1((是幂等的,并且您不在乎调用它两次,那么。

var id = method1();
method2();
method3();
if (!boolean) id = method1();

你可以用这种方式来做,但实际上,如果你只有两种情况(true,false(和几个方法,我会坚持使用你的代码或Infixo中的代码。

public class MyClass
{
public MyClass()
{
InitSequences();
}
public int Id { get; set; }
protected List<Action> SequenceOne
{ get; set; }
protected List<Action> SequenceTwo
{ get; set; }
public void InitSequences()
{
SequenceOne = new List<Action>()
{
() => Id = Method1(),
() => Method2(),
() => Method3()
};
SequenceTwo = new List<Action>()
{
() => Method2(),
() => Method3(),
() => Id = Method1()
};
}
public void OrderedExecution(bool order)
{
if (order)
Execute(SequenceOne);
else
Execute(SequenceTwo);
}
public void Execute(IEnumerable<Action> actions)
{
foreach (var action in actions)
action();
}

public int Method1()
{
return 1;
}
protected void Method2()
{
}
protected void Method3()
{
}
}

这只是一个非常简单的例子;函数列表";因为你要求一个,但这个解决方案对其他开发人员来说可能不太容易理解,只有当你有很多方法要订购和/或很多案例时,它才会变得令人困惑。

最新更新