c# - DRY 修复可能性,C#

标签 c# .net

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

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/

相关文章:

.net - WCF - 网络成本

c# - HttpWebRequest 不发送 header

c# - 什么时候使用 Task.Result 而不是等待 Task 的最佳位置

c# - asp.net TreeView 中的 OnSelectedNodeChanged 事件不起作用

C# 遍历按值排序的字典

c# - 在 C# 中将对象集合转换为 JavaScript 数组的创造性方法

c# - 从另一个事件中引发一个事件是不是很臭?

.net - 将 .NET Double.MinValue 插入 Access "Double"字段

c# - 在 .Net Winform 应用程序中使用 DBF 数据库

c# - 仅保存 Outlook MailItem 的真实附件