c# - 方法如何返回 IEnumerable?
问题描述
假设我有以下方法,它接受一个 IEnumerable 并返回一个 IEnumerable。Linq 查询实际返回什么实现?IEnumerable 是一个接口,并且接口不能被实例化,所以在引擎盖下它必须在做某事。但是,如果您在返回后检查它,它看起来就像一个 IEnumerable,即使在运行时也是如此。
public IEnumerable<SelectListItem> CreateDropdownList(IEnumerable<Release> releases)
{
return releases.Select(r =>
new SelectListItem {
Value = r.UniqRelease.ToString(),
Text = r.DescriptionOf
});
}
解决方案
使用接口的关键在于方法的用户无需担心实现。
但是当然有一个实现。在 LINQ 中,通常有一个扩展方法可以以通用方式处理任何集合。并且特定类型可能会选择创建一个了解集合内部工作的本地实现,从而实现更有效的实现。给定和数组它可能涉及跟踪索引。在链接的lidt中,它可能涉及“当前”指针并遵循“当前”上的“下一个”引用。
编译器甚至可以在给定 yield 语句的情况下为您创建实现。
关键是方法实现取决于类。
推荐阅读
- php - 如何在没有身份验证的情况下通过公共频道中的 laravel-echo-server 获取实时流量
- java - 使用按钮 (GUI) 运行 JAVA 程序
- sql-server - 需要游标来读取提供的参数或所有记录,但不会读取所有
- javascript - Cheerio:获取普通 + 文本节点
- python - 使用熊猫解析时间到时间戳
- shell - Shell 脚本 - 从 CSV 文件计算记录中的分隔符
- c# - ASP.NET C#中每一行的data_ItemDataBound的foreach语句
- python - 消费者可以从存储特定键值数据的分区中读取记录吗?
- ruby-on-rails - 如何解决rails中的“没有将类隐式转换为字符串”?
- amp-html - 将海报图片发送到 amp-youtube