您当前的位置: 首页 > 
  • 5浏览

    0关注

    193博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

LINQ之Count,LongCount

我寄人间雪满头丶 发布时间:2020-05-15 11:54:01 ,浏览量:5

返回LINQ大全首页

目录
  • Count()
  • LongCount()

Count()

使用Count()可以获取序列的长度,代替LengthCountpublic static int Count( this IEnumerable source ); MSDN

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]           intArray    = new int[] { 1, 5, 8, 12, 15, 16 };
        List    stringList  = new List() { "正一郎", "清次郎", "誠三郎", "征史郎" };
        
        int intCount    = intArray.Count();
        int stringCount = stringList.Count();

        System.Console.WriteLine( "intArray:{0}", intCount );
        System.Console.WriteLine( "stringList:{0}", stringCount );

        System.Console.ReadKey();
    }
} 

intArray:6
stringList:4

不仅如此,还可以获取符合条件的数量。 public static int Count( this IEnumerable source, Func predicate ); MSDN

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        int[]           intArray    = new int[] { 1, 5, 8, 12, 15, 16 };
        List    stringList  = new List() { "正一郎", "清次郎", "誠三郎", "征史郎" };

        int intCount    = intArray.Count( value => value % 2 == 0 );
        int stringCount = stringList.Count( value => value.IndexOf( "三" ) >= 0 );

        System.Console.WriteLine( "intArray:{0}", intCount );
        System.Console.WriteLine( "stringList:{0}", stringCount );

        System.Console.ReadKey();
    }
}

intArray:3
stringList:1
LongCount()

Count()的return类型是int类型,int类型最大范围在20几亿,那么当我们的数据超过这个数量呢?

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
    	// Enumerable.Range可以生成指定范围内的整数序列
        IEnumerable intSequenceA   = Enumerable.Range( 0, int.MaxValue );
        IEnumerable intSequenceB   = Enumerable.Range( int.MinValue, int.MaxValue );

        IEnumerable intSequenceAB  = intSequenceA.Concat( intSequenceB );

        int count = 0;
        try
        {
            count   = intSequenceAB.Count();
        }
        catch( System.Exception i_exception )
        {
            System.Console.WriteLine( "异常:{0}", i_exception );

            System.Console.ReadKey();
            return;
        }

        System.Console.WriteLine( "intSequenceAB:{0}", count );
        
        System.Console.ReadKey();
    }

}

异常:System.OverflowException

结果发生了异常。遇到这种数据量特别庞大的情况,我们就可以用LongCount()代替,LongCount()的返回值为longpublic static int Count( this IEnumerable source, Func predicate ); MSDN 让我们使用此方法重写发生异常的过程。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        IEnumerable intSequenceA   = Enumerable.Range( 0, int.MaxValue );
        IEnumerable intSequenceB   = Enumerable.Range( int.MinValue, int.MaxValue );

        IEnumerable intSequenceAB  = intSequenceA.Concat( intSequenceB );

        long count = 0;
        try
        {
            count   = intSequenceAB.LongCount();
        }
        catch( System.Exception i_exception )
        {
            System.Console.WriteLine( "异常:{0}", i_exception );

            System.Console.ReadKey();
            return;
        }

        System.Console.WriteLine( "intSequenceAB:{0}", count );

        System.Console.ReadKey();
    }

}

intSequenceAB:4294967294

这次没有异常,能够正确的得出结果。 LongCount()和Count()一样可以添加元素计数的条件。

public static long LongCount( this IEnumerable source, Func predicate ); MSDN

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        IEnumerable intSequenceA   = Enumerable.Range( 0, int.MaxValue );
        IEnumerable intSequenceB   = Enumerable.Range( int.MinValue, int.MaxValue );

        IEnumerable intSequenceAB  = intSequenceA.Concat( intSequenceB );

        long count = 0;
        try
        {
            count   = intSequenceAB.LongCount( value => value > -1000000 );
        }
        catch( System.Exception i_exception )
        {
            System.Console.WriteLine( "异常:{0}", i_exception );

            System.Console.ReadKey();
            return;
        }

        System.Console.WriteLine( "intSequenceAB:{0}", count );

        System.Console.ReadKey();
    }
}

intSequenceAB:2148483645
关注
打赏
1648518768
查看更多评论
立即登录/注册

微信扫码登录

0.2747s