C# IEnumerable在其他UI框架中也有高频使用

结合主流 .NET UI 框架,补充 WinForms/WPF 之外 大量高频使用 IEnumerable<T> 的场景,按框架分类,说明用法、典型场景+简短示例,全部是项目实战常用写法。

一、ASP.NET Web Forms(传统网页框架)

WebForms 服务端列表控件全部依赖 IEnumerable 做数据绑定,早年.NET 网页主流用法。

常用控件 & 场景

  • RepeaterDataListGridViewDropDownListRadioButtonList
  • 下拉框、列表、表格、重复模板渲染
// 后端代码
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 作为标准数据源

典型场景

  1. 高级表格(GridControl / RadGrid)
    大数据表格、分组、筛选、分页,数据源统一接收 IEnumerable<T>
  2. 树形控件(TreeList / RadTreeView)
    层级数据用 IEnumerable 递归绑定子节点。
  3. 图表控件(Chart)
    折线图、柱状图的系列数据,传入 IEnumerable 点位集合。
  4. 导航栏、菜单、标签页
    菜单选项集合用 IEnumerable 渲染。

通用规则:第三方商用控件为了兼容性,从不限定为 List/Array,一律使用 IEnumerable


九、WinUI 3(微软新一代 Windows 原生 UI)

Windows 10/11 原生应用框架,UWP 升级版,面向 Windows 桌面/平板。

  • ListViewGridViewItemsRepeater(高性能重复控件)
  • 所有 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

  1. UGUI 循环列表(ScrollRect + 复用 Item)
    游戏滚动列表、背包、排行榜,数据源普遍用 IEnumerable
  2. UIToolkit(Unity 新版 UI 系统)
    类似 Web 前端,模板 + 数据绑定,序列遍历完全依赖 IEnumerable
  3. 游戏内部:怪物列表、道具列表、任务列表、Buff 列表等业务集合。
// 游戏道具列表
IEnumerable<Item> bagItems = player.Bag.GetItems();
foreach (var item in bagItems)
{
    CreateItemUI(item);
}

十二、总结:全框架规律 + 高频优先级

1. 所有 .NET UI 框架统一规则

只要是「列表/重复项/下拉/表格/树」控件,数据源类型几乎清一色是 IEnumerable
原因:

  • 兼容 List、数组、LINQ、yield 延迟序列、自定义集合
  • 只读、轻量、解耦,框架设计标准选择

2. 按当下项目热度排序(从高到低)

  1. Blazor(现代 Web 前端,极高频)
  2. MAUI(跨平台移动端/桌面,极高频)
  3. ASP.NET Core MVC / Razor Pages(后端视图,高频)
  4. WinUI 3(Windows 原生客户端)
  5. Avalonia UI(开源跨平台桌面)
  6. 第三方控件库(DevExpress/Telerik)(工业软件、管理系统)
  7. Unity (UGUI / UIToolkit)(游戏行业)
  8. WebForms、Xamarin(历史遗留项目)

3. 通用开发约定(所有 UI 框架通用)

  1. 页面/组件列表属性:优先定义 IEnumerable<T>,而非 List<T>
  2. 控件 ItemsSource / DataSource:直接绑定 IEnumerable
  3. 自定义可复用列表组件:入参统一用 IEnumerable<T> 提升通用性
  4. 大数据列表/虚拟滚动:配合 yield + IEnumerable 实现流式加载
posted @ 2026-06-10 06:09  人生就是修炼  阅读(10)  评论(0)    收藏  举报