gpt4 book ai didi

c# - ForEach 扩展方法

转载 作者:行者123 更新时间:2023-11-30 14:30:23 24 4
gpt4 key购买 nike

我对一行代码有点困惑:

Enumerable.Range(1,10).ToList().ForEach(Console.WriteLine);

这一行按照它说的做,它打印出从 1 到 10 的每个数字,每个数字之间有一个换行符,所有这一切都只需要一行代码......

现在我充其量只是一个 C# 新手,但它对我来说完全陌生,我们如何调用 Console.WriteLine() 而不向它提供任何参数?它怎么知道要打印什么?根据这种语法,我什至不清楚我们是在调用一个方法(考虑到 WriteLine 周围缺少括号)。

我假设这里“幕后”发生了很多事情,但我不太擅长阅读 IL 代码,从我阅读 MSIL 时收集到的内容来看,它看起来像 ForEach 在集合中的每个元素上调用一个通用委托(delegate)(System.Action),我猜测它然后将元素作为参数传递给 System.Action代表,但这只是我的猜测..

最佳答案

存在来自方法组(在本例中为 Console.WriteLine)和兼容的委托(delegate)类型的隐式转换。您的代码实际上与

Action<int> f = Console.WriteLine;
Enumerable.Range(1,10).ToList().ForEach(f);

委托(delegate) f 与方法兼容 void Console.WriteLine(int)

关于c# - ForEach 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com