美文网首页
c# MoreLinq 之 Assert

c# MoreLinq 之 Assert

作者: wwmin_ | 来源:发表于2021-02-25 08:53 被阅读0次

    前言

    本系列是对MoreLinq库的学习与总结,分析各个Api的实现方式及用法,也为能写出更高效的Linq打下基础。

    Assert断言,如果有不符合的项则抛异常

    • 应用
    void AssertTest()
    {
        var a = new[] { 2, 4, 6, 8, 9 };
        a.Assert(x => x % 2 == 0,x=>new Exception("存在不符合的数据")).Dump();
    }
    

    当遍历执行到9时,不满足x%2 == 0, 则执行自定义异常。自定义抛异常方法也可省略。

    • 源码:
    public static class MoreEnumerable
    {
        public static IEnumerable<TSource> Assert<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
        {
            return Assert(source, predicate, null);
        }
        public static IEnumerable<TSource> Assert<TSource>(this IEnumerable<TSource> source,
               Func<TSource, bool> predicate, Func<TSource, Exception>? errorSelector)
        {
            if (source == null) throw new ArgumentNullException(nameof(source));
            if (predicate == null) throw new ArgumentNullException(nameof(predicate));
    
            return _(); IEnumerable<TSource> _()
            {
                foreach (var element in source)
                {
                    var success = predicate(element);
                    if (!success)
                        throw errorSelector?.Invoke(element) ?? new InvalidOperationException("Sequence contains an invalid item.");
                    yield return element;
                }
            }
        }
    }
    

    分析:
    调用foreach依次执行predicate(element),当有不满足情况时就执行异常操作。

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

    相关文章

      网友评论

          本文标题:c# MoreLinq 之 Assert

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