返回LINQ大全首页
目录
Count()
- Count()
- LongCount()
使用Count()
可以获取序列的长度,代替Length
,Count
。 public 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()
的返回值为long
。 public 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