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#可按函数式编程思路组合多个纯函数。

相关推荐
格林威8 小时前
C#图像分块处理:图像按行或按块(Tile)切分,多个 CPU 核心同时处理不同的区域
开发语言·图像处理·人工智能·机器学习·计算机视觉·c#·工业相机
雪隐8 小时前
WPF + MVVM 实战系列04-我摔了 5 次,你看着绕
c#
消费知多少9 小时前
解析勤策签约大西洋焊接费用核销实践案例
开发语言·c#
CSDN_RTKLIB9 小时前
HashSet、Dictionary
c#
曹牧9 小时前
C#与Java后台交互
java·windows·microsoft·c#
吴可可12311 小时前
最小二乘法C#实现详解
c#
足球中国12 小时前
.net DataExcel控件 2.11.1.53版发布
c#·.net·excel
rockey6271 天前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
惊鸿醉1 天前
Unity 实战:用讯飞 WebAPI 做一个“说普通话、播方言“的语音程序
unity·c#·游戏引擎·语音识别
略略略咯咯1 天前
C#Unity
开发语言·unity·c#