这段代码困扰了我一整天,部分原因是
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
关于c# - DRY 修复可能性,C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36140784/