(extension) bool IEnumerable<string>.Any<string>(Func<string, bool> predicate)(+ 1 overload)
Determines whether any element of a sequence satisfies a condition.
Exceptions:
ArgumentNullException
意思是:
- 您可以将此作为扩展方法调用。
- 在
IEnumerable<string> 上,您可以对其进行迭代,从而得到string。 string 是包含文本的类型。
- 方法的名字是
Any
- 它有一个类型参数,设置为
string。您可能可以在IEnumerable<T> 上调用它,其中T 不是string。
- 它接受一个
Func<string, bool>predicate,这是一个函数的委托,该函数接受一个string作为输入参数并返回一个bool。
- 该方法还有另一个重载,它采用不同的参数。
- 方法文档说它“确定序列的任何元素是否满足条件”。我们可以假设它遍历了
IEnumerable<string> 调用 Func<string, bool> 传递字符串,从 IEnumerable<string> 传递每个值,并返回是否为其中任何一个得到true。
- 该方法被记录为抛出一个
ArgumentNullException,假设你传递了一个null。
如果我们在网上查找它,我们会在官方文档中找到Enumerable.Any。在那里我们可以看到其他重载以及一些示例。
这是一个:
Pet[] pets =
{ new Pet { Name="Barley", Age=8, Vaccinated=true },
new Pet { Name="Boots", Age=4, Vaccinated=false },
new Pet { Name="Whiskers", Age=1, Vaccinated=false } };
// Determine whether any pets over age 1 are also unvaccinated.
bool unvaccinated =
pets.Any(p => p.Age > 1 && p.Vaccinated == false);
我们看到Pet 的数组,我们在上面调用Any。因此,在这种情况下,类型参数是Pet 而不是string,因为Pet 的数组是您可以迭代的东西,它会为您提供Pet 类型的元素...我说Pet 的数组是IEnumerable<Pet>... 因此我们调用Any<Pet>。
我们观察到参数是一个 lambda 表达式:p => p.Age > 1 && p.Vaccinated == false
这个 lambda 表示一个接受参数 p 的匿名函数。由于我们知道我们正在使用Any<Pet>,并且我们知道Any<Pet> 想要一个接受Pet 并返回bool 的函数的委托,我们知道p 是一个Pet。
匿名函数接受Petp比较属性Age和1以及属性Vaccinated和false,如果Age大于1,则返回true而Vaccinated 是假的。
查看数组中的值,我们可以看到第二项(Name"Boots" 之一)的Age 大于1 和Vaccinated 是false。因此,匿名函数应该为那个Pet返回true。
如果predicate(匿名函数)对于任何元素是true,则Any 返回true,我们期望Any 在这种情况下返回true。官方文档中的示例描述和预期输出证实了这一点。
如果我们仍有疑问,当然可以尝试运行代码:code on SharpLab。预期的输出是“有超过一岁的未接种疫苗的动物。”。
如果你想更进一步,可以搜索reference implementation of Enumerable.Any。
如果你知道去哪里看,你可以得到.NET Core source for Enumerable.Any,不保证会留在那里,reectoring 可以把它放在其他地方。
您可能还对有关extension methods 的文档感兴趣。
另见What is Func, how and when is it used。