C# 数组有一个带条件的元素

本文关键字:元素 条件 数组 有一个 | 更新日期: 2023-09-27 18:31:47

我有一个类MyClass,它有一个返回布尔值的方法MyFunction。 然后我有一个 MyClass 的数组 MyArray,如果这个数组有一个对象,我需要返回 true,其中 MyFunction 返回 true,我实际上使用这个:

 bool MyOtherFunction () {
     foreach (MyClass x in MyArray.Where(y => y.MyFunction))
        {
            return true;
        }
     return false;
 }

但是Visual Studio不断警告我,因为"从未使用局部变量'x'",那么,如何在不声明新变量的情况下检查这一点?

C# 数组有一个带条件的元素

您可以将函数的整个主体替换为

return MyArray.Any(x => x.MyFunction());

您当前的函数实质上是在过滤掉任何未从对 MyFunction 的调用中返回 true 的结果。如果有结果,您将开始枚举Where筛选器的结果,并在第一项返回 true。如果没有结果,则没有要枚举的内容,并且您将返回 false。通过使用 LINQ 的 Any 方法,您将改为枚举,直到数组的 MyFunction 调用中的某个项返回 true,此时您将满足条件并且可以返回 true。如果MyFunction是一个潜在的昂贵调用,这将比为数组中的每个可能元素执行函数要快得多,而您真正想要的只是在任何一个元素碰巧为真时返回。当然,如果它很昂贵,如果它们都返回 false,您将为每个元素执行它。