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