ZetCode

ASP.NET IEnumerable

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 IEnumerable 接口。此接口对于在 C# 和 .NET 中处理集合至关重要。

IEnumerable 提供了一种迭代集合的简单方法。它广泛用于 ASP.NET 应用程序的 LINQ 查询、foreach 循环和数据绑定场景中。

基本定义

IEnumerable 是 System.Collections 命名空间中的一个接口。它公开了一个枚举器,该枚举器支持对指定类型集合的简单迭代。

该接口包含一个方法:GetEnumerator()。此方法返回一个 IEnumerator 对象,可用于遍历集合。

IEnumerable 是所有非泛型集合的基接口。其泛型对应物 IEnumerable<T> 在现代 .NET 应用程序中更受青睐。

主要功能包括延迟执行和惰性求值。许多 LINQ 方法返回 IEnumerable 以实现查询组合和高效执行。

ASP.NET IEnumerable 示例

以下示例演示了在 ASP.NET Web API 中使用 IEnumerable。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/BooksController.cs
using Microsoft.AspNetCore.Mvc;
using System.Collections;

[ApiController]
[Route("api/[controller]")]
public class BooksController : ControllerBase
{
    private static List<Book> _books = new()
    {
        new Book(1, "The Hobbit", "J.R.R. Tolkien"),
        new Book(2, "Dune", "Frank Herbert"),
        new Book(3, "Neuromancer", "William Gibson")
    };

    [HttpGet]
    public IEnumerable<Book> GetAllBooks()
    {
        return _books;
    }

    [HttpGet("filter")]
    public IEnumerable<Book> FilterBooks([FromQuery] string term)
    {
        return _books.Where(b => 
            b.Title.Contains(term, StringComparison.OrdinalIgnoreCase) ||
            b.Author.Contains(term, StringComparison.OrdinalIgnoreCase));
    }

    [HttpGet("ids")]
    public IEnumerable<int> GetAllBookIds()
    {
        return _books.Select(b => b.Id);
    }

    [HttpGet("non-generic")]
    public IEnumerable GetNonGenericBooks()
    {
        return _books;
    }
}

public record Book(int Id, string Title, string Author);

此控制器演示了四种不同的 IEnumerable 场景。当访问 /api/books 时,第一个方法返回所有图书,类型为 IEnumerable<Book>。

第二个方法使用 LINQ 的 Where 方法按标题或作者过滤图书。第三种方法仅投影图书 ID,返回 IEnumerable<int>。

第四种方法展示了非泛型 IEnumerable 的用法。虽然可用,但泛型版本提供了更好的类型安全性,并且在现代代码中更受青睐。

IEnumerable 是 API 返回类型的理想选择,因为它支持延迟执行。实际的枚举发生在响应被序列化时。

来源

Microsoft IEnumerable 文档

在本文中,我们探讨了 ASP.NET 8 中的 IEnumerable 接口。这个基本接口能够高效地处理 .NET 应用程序中的集合。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程