Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用类型为_C#_Arrays_Predicate - Fatal编程技术网

C# 如何使用类型为

C# 如何使用类型为,c#,arrays,predicate,C#,Arrays,Predicate,我对c的语法很陌生 我声明了一个Process数组:Process[]myProc,并试图使用Count成员 我试着这样使用它: ifmyProc.Count>0 但它似乎不起作用 正确的语法应该是什么 谢谢 编辑:编译器错误为:运算符>不能应用于“method group”和“int”类型的操作数 为了澄清,我对函数的语法感兴趣。因为Count被声明为 int IEnumerable.CountFunc谓词,我对语法感到困惑 当我使用C++时,向量大小的计数将是类似于V.Stand的,所以我不

我对c的语法很陌生

我声明了一个Process数组:Process[]myProc,并试图使用Count成员

我试着这样使用它: ifmyProc.Count>0 但它似乎不起作用

正确的语法应该是什么

谢谢

编辑:编译器错误为:运算符>不能应用于“method group”和“int”类型的操作数

为了澄清,我对函数的语法感兴趣。因为Count被声明为 int IEnumerable.CountFunc谓词,我对语法感到困惑


当我使用C++时,向量大小的计数将是类似于V.Stand的,所以我不知道如何处理这个计数< /p> ,不管计数特性如何,您似乎只是想知道是否有任何进程。您应该改为使用.Any方法

请确保添加一个:

using System.Linq;
这也是Count面临的问题,因为Count是一种Linq方法

然后,使用

if(myProcs.Any())
{

}
这里的优点是,如果有10000个进程,那么Count必须对所有进程进行计数。Any在找到第一个后返回true。这要有效得多

或者,您也可以使用.Length>0,但我更喜欢.Any

编辑:


正如JacquesB正确指出的那样,对于数组和实现ICollection的任何对象,哪些数组执行了此操作,.Count方法具有一个优化,该优化将检查类型是否实现ICollection,以及是否调用了Length,因此,在这种情况下,any的效率并不高,但我还是更喜欢它,因为它在语义上对我更有意义。

可能会让您感到困惑的是,如果类型参数可以由编译器推断,那么方法的类型参数是可选的。例如

myProc.Count<Process>()
因为myProc的类型是IEnumerable,编译器可以推断类型参数ISource的值必须是Process。因此,显式地声明它只会使代码变得混乱

现在,您问题中显示的签名实际上是一个与您使用的不同的重载。有一个Count重载,它将谓词函数作为参数,但在代码中,您使用的是一个没有谓词的函数,实际上如下所示:

int IEnumerable<TSource>.Count<TSource>()

定义:似乎不起作用。如果你去找你的机修工说你的车坏了,出了什么问题,你真的希望他诊断你的车吗?这似乎不起作用——那么是编译错误、运行时异常还是意外行为?你会得到什么错误信息?虽然简单的问题是受欢迎的,但问题本身应该是一个好问题。这通常包括15-30分钟的研究,并在你的问题中展示研究结果!进一步提示:对于初学者来说,“不工作”是一个非常糟糕的描述。我编辑了这个问题以包含specfic编译器错误。我不理解您的编辑。。。你到底对什么感到困惑?Count是IEnumerable接口上的一个C扩展方法,由.NET中的所有集合类实现,并打包在System.Linq命名空间中。它是一个泛型函数,可以自动推断其类型,因此您不必担心TSource等。。除非你正在做更高级的事情。我怀疑问题出在使用指令上。虽然计数的解释很好,但是如果您详细说明缺少的using指令,对OP来说可能更好。如果myProcs是一个数组,那么计数是已知的,因此它不必对所有的计数。不过,使用Any更为惯用。@JacquesB-Count是一个IEnumerable方法,因此它不知道它是一个数组。谢谢。它确实解决了我的问题。但我对语法更感兴趣。请查看我的上述编辑。@Erik:Count扩展方法足够聪明,可以检查目标是否实现ICollection接口,并使用此接口中的Count方法,即O1。
int IEnumerable<TSource>.Count<TSource>()