如何使用类型为 <>的变量

本文关键字:变量 何使用 类型 | 更新日期: 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>()