美文网首页
c# 从MoreLinq中学到的(二)

c# 从MoreLinq中学到的(二)

作者: wwmin_ | 来源:发表于2021-02-19 17:49 被阅读0次

    前言

    在对MoreLinq库梳理的过程中学习到的一些知识点的整理。

    morelinq是对Linq to object的有力补充,国外有本书《Thinking in LINQ》专门花了一章的篇幅介绍了它,它的开发者也是《C# in Depth》作者。

    1. 数字指定小数位数/有效位数/取整整数不足补零

    //数字指定小数位数/有效位数/取整整数不足补零
    void ToStringWithFixedNum()
    {
        var f = 12.123456;
        f.ToString("F3").Dump();//12.123
        f.ToString("G3").Dump();//12.1
        f.ToString("000", CultureInfo.InvariantCulture).Dump();//012
         //字符串复合格式设置
        String.Format("0x{0:X} {0:E} {0:N}",Int64.MaxValue);
        //0x7FFFFFFFFFFFFFFF 9.223372E+018 9,223,372,036,854,775,807.00
    }
    

    对数字进行展示时经常会有特殊处理,特别是小数,所以使用一些ToString的方法会很方便。CultureInfo是对地域的选择,更多信息可查看官方解释CultureInfo 类。若有更多格式设置,可查看符合格式设置,以便满足更多个性化ToString设置。

    2. 两个可遍历集合的复合操作

    比较常用的是求和

    void AggregateLambda()
    {
        var i = Enumerable.Range(0, 26);
        var a = Enumerable.Range(0, 26).Select(a => (char)('a' + a));
        var zipAggregate = i.Zip(a, (us, them) => (Us: us, Them: them)).Aggregate(0, (x, y) => x + y.Us);
        zipAggregate.Dump();//325
    }
    

    此案例展示了Linq的Zip用法,而且返回了一个命名的ValueTuple,对ValueTuple的灵活使用可简化代码,并减少对对象的依赖,使用Aggregate将两个数组进行转换操作。

    3. is type pattern

    void IsTypeExpression()
    {
        ArrayList al = new ArrayList() { 0, 1, 'a', "b" };
        StringBuilder res = new StringBuilder();
        foreach (var a in al)
        {
            if (a is { } ai and not string and not char and not 0)
            {
                res.Append("\t");
                res.Append(a);
            }
        }
        res.ToString().Trim().Dump();//1
    }
    

    is not 模式是在c#9 版本中引入的,可简化对对象的判断,使书写更语义化。

    4. OfType<T>

    void OfTypeFunc()
    {
        ArrayList al = new ArrayList() { 0, 1, 'a', "b" };
        var ai = al.OfType<int>();
        ai.Aggregate((x, y) => x + y).Dump("OfType");//1
    }
    

    使用OfType<T>对ArrayList进行类型过滤。

    系列文章,敬请期待后续。

    本文作者:wwmin
    微信公众号: DotNet技术说
    本文链接:https://www.jianshu.com/p/f517aa872275
    关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
    版权声明:转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!

    相关文章

      网友评论

          本文标题:c# 从MoreLinq中学到的(二)

          本文链接:https://www.haomeiwen.com/subject/rxwaxltx.html