这段代码整天困扰着我,部分原因是

if (result != OpResult.Success) { // return

代码到处重复。
进行一系列(1..n)评估。每次评估后,都会进行检查以确保操作成功(使用从枚举派生的自定义返回值):OpResult.Success
下面是一个示例(包含示例对象等):
OpResult result = OpResult.Sucess;

result = performOperationOne(commonObjectArgument);

if (result != OpResult.Success)
{
    trace.Exit(); // Exit logging mechanism
    return result;
}

result = performOperationTwo(commonObjectArgument);

if (result != OpResult.Success)
{
    trace.Exit();
    return result;
}

如您所见,if (result != OpResult.Success)被用作流控制,即除非所有前面的操作都成功,否则下一个操作将不会运行。
有了.net 4.*之后,c在语法上已经具备了一些令人难以置信的能力。有什么我可以做的,以消除每次操作后需要重新编写此评估?

最佳答案

一种可能性是建立一个操作列表并在循环中执行它们:

var operations = new List<Func<CommonObjectArgumentType, OpResult>>
{
    Operation1,
    Operation2
};

OpResult result = OpResult.Success;
foreach (var op in operations)
{
    result = op(commonObjectArgument);
    if (result != OpResult.Success)
    {
        trace.exit();
        return result;
    }
}

// all operations were successful

10-04 13:40