Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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#_Functional Programming - Fatal编程技术网

什么是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

最近我看了Pluralsight课程“C#中的函数式编程”。并在我的爱好项目中重写了一些方法。现在它们看起来像这样:

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
,其中提供了大于的表达式和等于的表达式。