Language-ext

C#对函数式编程支持的库,支持.net framework,从neget上下载

Option<T>:避免处理空指针

cs 复制代码
        private Option<int> Parse(string v)
        {
            if (int.TryParse(v, out int i))
                return new Some<int>(i);
            return Option<int>.None;
        }

            Option<int> res = Parse("123w");
            res.IfNone(() => { Debug.WriteLine("error"); });
            if (res.IsNone)
            {
                Debug.WriteLine("failed");
            }
            else
            {
                Debug.WriteLine(res.Value<int>());
            }

Either<left, right>:函数式的Error处理

cs 复制代码
     private Either<string, int> ParseInt(string v)
     {
         if(int.TryParse(v, out var i))
         {
             return i;
         }
         return "parse error";
     }

     private Either<string, int> SafeAdd(int v1, int v2)
     {
         return v1 + v2;
     }

     private Either<string, int> SafeDiv(int v1, int v2)
     {
         if (v2 == 0)
             return "Div 0 error";
         return v1 / v2;
     }


            Either<string, int> res02 = ParseInt("23").Bind(v3 => SafeAdd(v3, 10)).Bind(v4 => SafeDiv(v4, 0)).Bind(v5 => SafeAdd(v5, 10));
            int addResult;
            string error;
            var resBool = res02.Match(
                Right: x=> { addResult = x; return true; },
                Left: eInfo=> { error = eInfo; return false; }
                );
            var trupleList = new List<(string, int)> { ("a", 1), ("b", 2) };
            Map<string, int> map = new Map<string, int>(trupleList);
            var v = map.Find("a").Map(v1=>v1 * 2);
            var v2 = map.Find("c");
            var i = v.Value();
            var mapRes = v2.Match(
                Some: x=> true,
                None: false
            );

Match:对Option或Either结果进行解析,见上例

Map:对Option、集合进行映射

Bind:从Option中提取数据后继续执行Map操作

Language-Ext库提供了如上支持,让C#可按函数式编程思路组合多个纯函数。

相关推荐
人工智能AI技术1 小时前
DeskClaw Windows上线|C#开发AI桌面助手,轻量内核源码解析
人工智能·c#
似水明俊德1 小时前
04-C#.Net-委托和事件-面试题
java·开发语言·面试·c#·.net
程序员老乔4 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#
祝大家百事可乐5 小时前
嵌入式——02 数据结构
c++·c#·硬件工程
我是唐青枫5 小时前
深入理解 C#.NET TaskScheduler:为什么大量使用 Work-Stealing
c#·.net
唯情于酒7 小时前
net core web api 使用log4net
c#·.net core
SunnyDays10118 小时前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
人工智能AI技术8 小时前
Qwen3.5-Plus登顶|C#集成通义千问,高并发服务实战优化
人工智能·c#
SunnyDays10119 小时前
如何使用 C# 在 Word 文档中插入超链接 (含文本与图片链接)
开发语言·c#
一念春风9 小时前
证件照制作工具(WPF C#)
c#·wpf