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。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
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 返回类型的理想选择,因为它支持延迟执行。实际的枚举发生在响应被序列化时。
来源
在本文中,我们探讨了 ASP.NET 8 中的 IEnumerable 接口。这个基本接口能够高效地处理 .NET 应用程序中的集合。