C# IEnumerable在其他UI框架中也有高频使用
结合主流 .NET UI 框架,补充 WinForms/WPF 之外 大量高频使用 IEnumerable<T> 的场景,按框架分类,说明用法、典型场景+简短示例,全部是项目实战常用写法。
一、ASP.NET Web Forms(传统网页框架)
WebForms 服务端列表控件全部依赖 IEnumerable 做数据绑定,早年.NET 网页主流用法。
常用控件 & 场景
Repeater、DataList、GridView、DropDownList、RadioButtonList- 下拉框、列表、表格、重复模板渲染
// 后端代码
IEnumerable<Category> categories = GetCategoryList();
// 1. 下拉框绑定
ddlCategory.DataSource = categories;
ddlCategory.DataTextField = "Name";
ddlCategory.DataValueField = "Id";
ddlCategory.DataBind();
// 2. 重复列表 Repeater
rptList.DataSource = categories;
rptList.DataBind();
特点:所有列表控件 DataSource 原生接收 IEnumerable,是该框架基础。
二、ASP.NET MVC / ASP.NET Core MVC(Razor 视图)
后端传给页面的列表数据,视图遍历渲染,高频使用。
1. 控制器传值(返回 IEnumerable 给视图)
public ActionResult Index()
{
// 序列传给视图
IEnumerable<Product> products = _productService.GetList();
return View(products);
}
2. Razor 视图中遍历
@model IEnumerable<Product>
<ul>
@foreach (var item in Model)
{
<li>@item.Name</li>
}
</ul>
3. 页面下拉、单选组
@{
IEnumerable<SelectListItem> statusList = GetStatusItems();
}
@Html.DropDownList("Status", statusList)
三、ASP.NET Core Razor Pages
和 MVC 逻辑一致,页面模型(PageModel)大量使用 IEnumerable 承载列表数据。
public class IndexModel : PageModel
{
public IEnumerable<Notice> NoticeList { get; set; }
public async Task OnGet()
{
NoticeList = await _db.Notices.ToListAsync();
}
}
视图直接遍历:
@foreach (var n in Model.NoticeList)
{
<div>@n.Title</div>
}
四、Blazor(Web 前端框架,主流现代 UI)
Blazor Server / Blazor WebAssembly 两大版本,列表渲染、组件传参、循环渲染极度依赖 IEnumerable,属于最高频场景之一。
1. 页面/组件列表渲染(@foreach)
Blazor 没有传统 DataSource,直接在模板里遍历序列:
@code {
private IEnumerable<User> _userList = new List<User>();
}
<!-- 直接遍历 IEnumerable -->
<div class="list">
@foreach (var user in _userList)
{
<div>@user.UserName</div>
}
</div>
2. 组件参数接收列表(通用列表组件)
自定义通用表格、下拉、多选组件,参数统一用 IEnumerable<T>,兼容所有集合:
<!-- 自定义下拉组件 Select.razor -->
@code {
[Parameter]
public IEnumerable<SelectOption> Options { get; set; } = Enumerable.Empty<SelectOption>();
}
<!-- 使用组件 -->
<Select Options="@optionList" />
3. 虚拟滚动、大数据列表
Blazor 虚拟列表组件,数据源强制要求 IEnumerable,配合延迟加载。
五、MAUI(.NET 跨平台 UI:Android / iOS / Windows / Mac)
.NET 统一跨平台 UI,完全继承 Xamarin 设计,所有列表控件数据源都是 IEnumerable。
核心控件 & 用法
CollectionView(主流列表)ListView(传统列表)Picker(下拉选择)BindableLayout(布局内循环渲染)
示例 1:ListView / CollectionView 绑定
// 后台属性,用 IEnumerable 做数据源
public IEnumerable<Goods> GoodsList { get; set; }
XAML:
<ListView ItemsSource="{Binding GoodsList}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
示例 2:BindableLayout 任意布局循环
MAUI 特色:让普通布局(StackLayout、Grid)直接遍历 IEnumerable:
<StackLayout BindableLayout.ItemsSource="{Binding Tags}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding}" />
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
特点:MAUI 所有可循环控件,
ItemsSource类型统一为IEnumerable。
六、Xamarin.Forms(旧版跨平台,MAUI 前身)
和 MAUI 用法完全一致,历史项目大量存在:
- ListView、CollectionView、Picker、BindableLayout
- 所有
ItemsSource均为IEnumerable
七、Avalonia UI(跨平台开源 UI,替代 WPF/WinForms)
高性能跨平台桌面 UI,语法贴近 WPF,ItemsSource 标准 IEnumerable。
XAML 示例:
<ListBox ItemsSource="{Binding DataList}"/>
后台:
public IEnumerable<string> DataList { get; set; }
常用于工业软件、嵌入式桌面、跨平台客户端,IEnumerable 是基础数据源。
八、DevExpress / Telerik / Infragistics 第三方 UI 控件库
工业级、商用 .NET 控件全家桶(桌面 + Web),所有高级列表、表格、树、下拉、分页控件全部以 IEnumerable 作为标准数据源。
典型场景
- 高级表格(GridControl / RadGrid)
大数据表格、分组、筛选、分页,数据源统一接收IEnumerable<T>。 - 树形控件(TreeList / RadTreeView)
层级数据用IEnumerable递归绑定子节点。 - 图表控件(Chart)
折线图、柱状图的系列数据,传入IEnumerable点位集合。 - 导航栏、菜单、标签页
菜单选项集合用IEnumerable渲染。
通用规则:第三方商用控件为了兼容性,从不限定为 List/Array,一律使用 IEnumerable。
九、WinUI 3(微软新一代 Windows 原生 UI)
Windows 10/11 原生应用框架,UWP 升级版,面向 Windows 桌面/平板。
ListView、GridView、ItemsRepeater(高性能重复控件)- 所有
ItemsSource标准类型:IEnumerable
XAML:
<ListView ItemsSource="{Binding Items}"/>
后台属性:
public IEnumerable<DemoItem> Items { get; set; }
ItemsRepeater(高性能无限列表):微软主推,重度依赖 IEnumerable 做流式渲染。
十、UWP(旧版 Windows 应用)
WinUI3 前身,传统 Windows 应用商店应用,机制同上:
- 列表、网格、选择器
ItemsSource = IEnumerable
十一、Unity(游戏引擎 UI + 游戏逻辑)
Unity 使用 C# 开发,UGUI / UIToolkit 两套 UI 体系,大量使用 IEnumerable:
- UGUI 循环列表(ScrollRect + 复用 Item)
游戏滚动列表、背包、排行榜,数据源普遍用IEnumerable。 - UIToolkit(Unity 新版 UI 系统)
类似 Web 前端,模板 + 数据绑定,序列遍历完全依赖IEnumerable。 - 游戏内部:怪物列表、道具列表、任务列表、Buff 列表等业务集合。
// 游戏道具列表
IEnumerable<Item> bagItems = player.Bag.GetItems();
foreach (var item in bagItems)
{
CreateItemUI(item);
}
十二、总结:全框架规律 + 高频优先级
1. 所有 .NET UI 框架统一规则
只要是「列表/重复项/下拉/表格/树」控件,数据源类型几乎清一色是
IEnumerable
原因:
- 兼容
List、数组、LINQ、yield 延迟序列、自定义集合 - 只读、轻量、解耦,框架设计标准选择
2. 按当下项目热度排序(从高到低)
- Blazor(现代 Web 前端,极高频)
- MAUI(跨平台移动端/桌面,极高频)
- ASP.NET Core MVC / Razor Pages(后端视图,高频)
- WinUI 3(Windows 原生客户端)
- Avalonia UI(开源跨平台桌面)
- 第三方控件库(DevExpress/Telerik)(工业软件、管理系统)
- Unity (UGUI / UIToolkit)(游戏行业)
- WebForms、Xamarin(历史遗留项目)
3. 通用开发约定(所有 UI 框架通用)
- 页面/组件列表属性:优先定义
IEnumerable<T>,而非List<T> - 控件
ItemsSource/DataSource:直接绑定IEnumerable - 自定义可复用列表组件:入参统一用
IEnumerable<T>提升通用性 - 大数据列表/虚拟滚动:配合
yield+IEnumerable实现流式加载

浙公网安备 33010602011771号