什么是C#链功能方法警告?“怎么办?”;如果是;?
最近我看了Pluralsight课程“C#中的函数式编程”。并在我的爱好项目中重写了一些方法。现在它们看起来像这样:什么是C#链功能方法警告?“怎么办?”;如果是;?,c#,functional-programming,C#,Functional Programming,最近我看了Pluralsight课程“C#中的函数式编程”。并在我的爱好项目中重写了一些方法。现在它们看起来像这样: public override CommandLineResult GetResult() { return Disposable.Using(new IndicatorRepository(), repo => { return repo.AddOrUpdateIndicator(Indicator, Value, DateTimeExte
public override CommandLineResult GetResult()
{
return Disposable.Using(new IndicatorRepository(), repo =>
{
return repo.AddOrUpdateIndicator(Indicator, Value, DateTimeExtensions.LocalNow().Date);
})
.Map((p) => new NumericIndicatorRecorderedModel()
{
Id = Guid.NewGuid().ToString(),
DbActionPreformed = true,
IsRewritten = Convert.ToBoolean(p),
IndicatorName = Indicator,
Value = Value,
ValueDate = ValueDate
})
.Map((model) => new CommandLineResult()
{
ActionName = "~/Views/CommandLine/_clresult_NumericIndicatorRecorderedModel.cshtml",
Model = model
});
}
public string GetResult(bool param) {
if (param) {
return MyClass.DoOneWay(p =>...).AlsoDo(q =>...).ToString();
}
else
{
return MyClass.DoOtherWay(p =>...).AlsoDo(q =>...).ToString();
}
}
public string GetResult(bool param)
{
return MyClass.DoIf(param, p => ...., q => ....).AlsoDo(q =>...).ToString();
}
这种链接方法有很多优点(我删除了使用一次性类,在每一步我都有表达式,而不是语句,等等)
但问题是:
- 这种方法不包括一些危险吗?它们是什么?(例如,调试不是更难吗)
- 如果需要分支代码执行流,人们通常在链接方法方面做什么?在什么地方和ifs断链?编写“映射如果”功能扩展(这种方法不会创建意大利面代码吗?)李>
public override CommandLineResult GetResult()
{
return Disposable.Using(new IndicatorRepository(), repo =>
{
return repo.AddOrUpdateIndicator(Indicator, Value, DateTimeExtensions.LocalNow().Date);
})
.Map((p) => new NumericIndicatorRecorderedModel()
{
Id = Guid.NewGuid().ToString(),
DbActionPreformed = true,
IsRewritten = Convert.ToBoolean(p),
IndicatorName = Indicator,
Value = Value,
ValueDate = ValueDate
})
.Map((model) => new CommandLineResult()
{
ActionName = "~/Views/CommandLine/_clresult_NumericIndicatorRecorderedModel.cshtml",
Model = model
});
}
public string GetResult(bool param) {
if (param) {
return MyClass.DoOneWay(p =>...).AlsoDo(q =>...).ToString();
}
else
{
return MyClass.DoOtherWay(p =>...).AlsoDo(q =>...).ToString();
}
}
public string GetResult(bool param)
{
return MyClass.DoIf(param, p => ...., q => ....).AlsoDo(q =>...).ToString();
}
或者实现功能性if帮助程序,如下所示:
public override CommandLineResult GetResult()
{
return Disposable.Using(new IndicatorRepository(), repo =>
{
return repo.AddOrUpdateIndicator(Indicator, Value, DateTimeExtensions.LocalNow().Date);
})
.Map((p) => new NumericIndicatorRecorderedModel()
{
Id = Guid.NewGuid().ToString(),
DbActionPreformed = true,
IsRewritten = Convert.ToBoolean(p),
IndicatorName = Indicator,
Value = Value,
ValueDate = ValueDate
})
.Map((model) => new CommandLineResult()
{
ActionName = "~/Views/CommandLine/_clresult_NumericIndicatorRecorderedModel.cshtml",
Model = model
});
}
public string GetResult(bool param) {
if (param) {
return MyClass.DoOneWay(p =>...).AlsoDo(q =>...).ToString();
}
else
{
return MyClass.DoOtherWay(p =>...).AlsoDo(q =>...).ToString();
}
}
public string GetResult(bool param)
{
return MyClass.DoIf(param, p => ...., q => ....).AlsoDo(q =>...).ToString();
}
如果有更多的选择,那该怎么办呢?
如何“从功能上”实现“切换”分支?这是一个非常广泛的问题。至于危险,这实际上取决于您如何处理异常,例如。有些语言具有
选项的概念,该选项可以返回某些内容,也可以不返回任何内容。此外,还可以进行验证
,该验证返回错误消息或实际值,具体取决于您。关于分支,您可以从C#中的表达式
中获取一个示例,其中有一个表达式.GreaterThanOrEqual
,其中提供了大于的表达式和等于的表达式。