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
。查看我的执行结果。