首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#函数式编程中正确选择哪一个?

在c#函数式编程中正确选择哪一个?
EN

Stack Overflow用户
提问于 2020-11-02 04:28:14
回答 1查看 244关注 0票数 0

我正在尝试使用c#学习函数式编程

我正在使用https://github.com/louthy/language-ext

如何才能在不使用.Match的情况下从这两个值中提取正确的值

如果没有临时变量,如何返回UpdateLocations的结果?

任一

代码语言:javascript
复制
public static Either<Exception, string[]> ExtractStringArray(IQueryCollection query, string filter)
        {
            try
            {
                return query.First(x => x.Key.ToLower() == filter).Value.ToString().Split(',').ToArray();
            }
            catch (Exception ex)
            {
                return ex;
            }
        }

异常情况

代码语言:javascript
复制
 static void HandleException(Exception ex) => Console.WriteLine(ex);

我正在使用下面的代码提取输出,有没有其他选择?

代码语言:javascript
复制
 private static string[] UpdateLocations(IQueryCollection query)
        {
            // creating a temporary value here
            string[] locations = new string[] { };

            ExtractStringArray(query, "location")
                .Match(
                    Left: ex => HandleException(ex),
                    Right: loc => locations = loc);

            return locations;
        }

更新变量

代码语言:javascript
复制
   var query = request.Query;
   result.Locations = UpdateLocations(query);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 17:23:10

代码语言:javascript
复制
// simplify ExtractStringArray using Try
static Either<Exception, string[]> ExtractStringArray(IQueryCollection query, string filter) =>
    Try(() => query.First(x => x.Key.ToLower() == filter).Value.ToString().Split(',').ToArray())
      .ToEither();

static void HandleException(Exception ex) => Console.WriteLine(ex);

var query = request.Query;
// now get result or exception (Either<...>)
var resultOrException = ExtractStringArray(query, "location");

// now execute side-effect if exception
resultOrException.IfLeft(HandleException); // side-effect (log error)

// now use result and supply default value in case of exception
result.Locations = resultOrException.IfLeft(new string[]{ });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64636634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档