LINQ之All

返回LINQ大全首页

All()

使用All()可以判断序列中的所有元素(例如数组或列表)是否满足指定条件。
MSDN

public static bool All<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate );

以下代码使用一个lambda表达式来描述要检查的条件。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]   numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        bool reaultA = numbers.All( value => value % 2 == 0 );
        bool reaultB = numbers.All( value => value < 10 );
        bool reaultC = numbers.All( value => value >= 5 );

        System.Console.WriteLine( "输出:{0}", numbers.Text() );
        System.Console.WriteLine( "全是偶数  :{0}", reaultA );
        System.Console.WriteLine( "小于10:{0}", reaultB );
        System.Console.WriteLine( "大于等于5 :{0}", reaultC );

        System.Console.ReadKey();
    }

    public static string Text<TSource>( this IEnumerable<TSource> i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
}

输出:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
全是偶数 :False
小于10:True
大于等于5 :False

那么在空的数组中使用All()会发生什么呢?让我们尝试一下。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]   numbers = new int[] {};
        
        bool reaultA = numbers.All( value => value % 2 == 0 );
        bool reaultB = numbers.All( value => value < 10 );
        bool reaultC = numbers.All( value => value >= 5 );

        System.Console.WriteLine( "输出:{0}", numbers.Text() );
        System.Console.WriteLine( "全是偶数  :{0}", reaultA );
        System.Console.WriteLine( "小于等于10:{0}", reaultB );
        System.Console.WriteLine( "大于等于5 :{0}", reaultC );

        System.Console.ReadKey();
    }

    public static string Text<TSource>( this IEnumerable<TSource> i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
} 

输出:
全是偶数 :True
小于等于10:True
大于等于5 :True

由此可知,在序列为空时所有条件都会返回true
为什么为空数组时返回True?让我们做更多的研究。
在下面的类中,GetNumber()函数会在调用时输出日志,让我们进一步了解All()

代码示例:

public static class Program
{
    private class Parameter
    {
        public int      ID      { get; set; }
        public string   Name    { get; set; }

        public int GetNumber()
        {
            System.Console.WriteLine( "我{0} 数值为{1} ", Name, ID );
            return ID;
        }

        public override string ToString()
        {
            return string.Format( "ID:{0}, Name:{1}", ID, Name );
        }
    }

    static void Main( string[] args )
    {
        Parameter[] parameters = new Parameter[]
        {
            new Parameter() { ID = 1, Name = "正一郎" },
            new Parameter() { ID = 2, Name = "清次郎" },
            new Parameter() { ID = 3, Name = "誠三郎" },
            new Parameter() { ID = 4, Name = "征史郎" },
        };

        // 全部小于10
        bool reault = parameters.All( value => value.GetNumber() < 10 );

        System.Console.WriteLine( "输出:{0}", parameters.Text() );
        System.Console.WriteLine( "全部小于10:{0}", reault );

        System.Console.ReadKey();
    }

    public static string Text<TSource>( this IEnumerable<TSource> i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
} 

我正一郎数值为1
我清次郎数值为2
我誠三郎数值为3
我征史郎数值为4
输出:[ID:1, Name:正一郎], [ID:2, Name:清次郎], [ID:3, Name:誠三郎], [ID:4, Nam
e:征史郎],
全部小于10::True

如果所有元素都满足条件,则可以看到每个元素都调用了GetNumber()
那么,如果所有元素不符合条件的话将是什么样的结果呢?

代码示例:

public static class Program
{
    private class Parameter
    {
        public int      ID      { get; set; }
        public string   Name    { get; set; }

        public int GetNumber()
        {
            System.Console.WriteLine( "我{0}数值为{1}", Name, ID );
            return ID;
        }

        public override string ToString()
        {
            return string.Format( "ID:{0}, Name:{1}", ID, Name );
        }
    }

    static void Main( string[] args )
    {
        Parameter[] parameters = new Parameter[]
        {
            new Parameter() { ID = 1, Name = "正一郎" },
            new Parameter() { ID = 2, Name = "清次郎" },
            new Parameter() { ID = 3, Name = "誠三郎" },
            new Parameter() { ID = 4, Name = "征史郎" },
        };

        bool reault = parameters.All( value => value.GetNumber() < 3 );

        System.Console.WriteLine( "输出:{0}", parameters.Text() );
        System.Console.WriteLine( "全小于3:{0}", reault );

        System.Console.ReadKey();
    }

    public static string Text<TSource>( this IEnumerable<TSource> i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
} 

我正一郎数值为1
我清次郎数值为2
我誠三郎数值为3
输出:[ID:1, Name:正一郎], [ID:2, Name:清次郎], [ID:3, Name:誠三郎], [ID:4, Nam
e:征史郎],
全小于3:False

可以发现征史郎的元素没有被调用。
如果存在不符合条件的要素,则执行将会被终止。
但是,这似乎跟空数组返回true并没有直接关系。
那么,true是否以空数组形式返回?经过搜索并没有找到相关的的官方资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值