Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有更好的方法来处理C中的多个IF语句#_C# - Fatal编程技术网

C# 有没有更好的方法来处理C中的多个IF语句#

C# 有没有更好的方法来处理C中的多个IF语句#,c#,C#,谁能告诉我怎样才能更好地编写下面的代码? 我必须按顺序执行所有这些方法。如果以前的方法成功,它将继续进行 var result = CreateCustomerRequest(requestDataInput); if (result.Error.HasError == false) { var result1 = GetCustomerInfo(new FetchCustomerDataI

谁能告诉我怎样才能更好地编写下面的代码? 我必须按顺序执行所有这些方法。如果以前的方法成功,它将继续进行

var result =  CreateCustomerRequest(requestDataInput);
                if (result.Error.HasError == false)
                {
                    var result1 = GetCustomerInfo(new FetchCustomerDataInput());
                    if (result1.Error.HasError == false)
                    {
                        var result2 = SaveCustomerDetails(result1.cutomer);
                        if (result2.Error.HasError == false)
                        {
                            var result3 = CreateCustomerItemMappingRequest(result2.IdList);
                            if (result3.Error.HasError == false)
                            {
                                var result4 = UpdateCustomerRequestStatus(RequestId);
                            }
                        }
                    }
                }

如果需要,可以尝试反转。更容易阅读和理解:

    var result =  CreateCustomerRequest(requestDataInput);
      if (result.Error.HasError) return ... error;
    var result1 = GetCustomerInfo(new FetchCustomerDataInput());
      if (result1.Error.HasError) return ... error;
    var result2 = SaveCustomerDetails(result1.cutomer);
      if (result2.Error.HasError) return ...error;
    var result3 =  CreateCustomerItemMappingRequest(result2.IdList);
      if (result3.Error.HasError) return ...error;
    var result4 = UpdateCustomerRequestStatus(RequestId);

     

使用面向铁路的编程,您的代码可能如下所示

var结果=
CreateCustomerRequest(请求数据输入)
.Bind(c=>GetCustomerInfo(新的FetchCustomerDataInput()))
.Bind(i=>SaveCustomerDetails(i.Customer))
.Bind(d=>createCustomerItemAppingRequest(d.IdList))
.Bind(m=>UpdateCustomerRequest(RequestId))
.Join(更新=>true,错误=>false);
它取决于
结果
,该结果可能包含值或错误,但不能同时包含两者<代码>绑定接受接受值并返回另一个
结果的函数
<代码>结果不是内置的,所以您需要自己实现它或寻找现有的实现。
Scott Wlaschin对此表示怀疑

反对在返回值中指示错误的常见理由是调用方可能忘记检查它们。但正如您所发现的,在每一步检查错误也会使代码更加冗长和不清晰。如果你控制你正在使用的API,通过抛出异常来修改它以指示错误。但它们不太适合堆栈溢出,因为它们基本上是基于意见的。这可能非常适合。我得到的错误是,Model不包含Bind的定义。@JOJO您的函数不仅应该返回
Model
,而且应该返回
Result
。查看我的执行结果。