这段代码整天困扰着我,部分原因是
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