我对c#的语法很陌生。
我正在声明一组Process
:Process[] myProc
,我正在尝试使用Count<>
成员。
我试着像这样使用它:
if(myProc.Count() > 0)
但它似乎不起作用。
正确的语法应该是什么?
感谢。
编辑:编译器错误是:运算符&gt;不能应用于'方法组'和'int'
类型的操作数为了澄清,我对函数的语法感兴趣。由于Count<>
被声明为
int IEnumerable<TSource>.Count<TSource>(Func<TSource,bool> predicate)
,我对语法感到困惑。
当我使用C ++时,Vector
大小的计数类似v.size()
,所以我不确定应该如何处理Count<>
答案 0 :(得分:3)
无论Count功能如何,您似乎只是想知道是否有任何进程。您应该使用.Any()方法。
确保添加:
using System.Linq;
(这也是您在Count中遇到的问题,因为Count是Linq方法)
然后,使用
if(myProcs.Any())
{
}
这里的优点是,如果有10,000个进程,那么Count()必须统计所有进程。 .Any找到第一个后返回true。这样效率更高。
或者,您也可以使用.Length > 0
,但我更喜欢.Any()。
编辑:
正如JacquesB正确指出的那样,在Arrays的情况下(以及任何实现ICollection的东西,哪些数组都有),然后.Count()方法有一个优化,它将检查该类型是否实现了ICollection,以及它是否调用了Length相反,所以在这种情况下,任何效率都不高,但我仍然更喜欢它,因为它对我来说在语义上更有意义。
答案 1 :(得分:0)
如果类型参数可以由编译器推断,那么可能会让您感到困惑的是方法的类型参数是可选的。例如
myProc.Count<Process>()
相当于
myProc.Count()
因为myProc的类型是IEnumerable<Process>
,所以编译器可以推断出类型参数ISource
的值必须是Process
。因此,明确说明它会使代码混乱。
现在问题中显示的签名实际上与您使用的签名不同。有一个Count
的重载,它将谓词函数作为参数,但在代码中你使用没有谓词的代码,实际上看起来像这样:
int IEnumerable<TSource>.Count<TSource>()