// ============================================================================ // 【文件说明】HwPortalTableDataInfo.cs - 分页数据返回包装类 // ============================================================================ // 这个类用于统一返回"表格分页数据"的格式。 // 在 Java 若依(RuoYi)框架中,有一个 TableDataInfo 类做同样的事情。 // 前端通常期望这样的 JSON 结构: // { // "code": 200, // "msg": "查询成功", // "total": 100, // 总记录数 // "rows": [...] // 当前页的数据列表 // } // ============================================================================ namespace Admin.NET.Plugin.HwPortal; /// /// 分页数据返回包装类。 /// /// 【C# 语法知识点 - 泛型类 <T>】 /// public class HwPortalTableDataInfo<T> 中的 <T> 是泛型参数。 /// 泛型允许你编写"类型无关"的代码,使用时再指定具体类型。 /// /// 例如: /// - HwPortalTableDataInfo<HwWeb> 表示"包含 HwWeb 列表的分页数据" /// - HwPortalTableDataInfo<HwProductInfo> 表示"包含 HwProductInfo 列表的分页数据" /// /// 对比 Java: /// Java 的泛型写法几乎一样:public class TableDataInfo<T> { ... } /// 但 Java 有"类型擦除",运行时 T 只是 Object。 /// C# 的泛型在运行时是真实类型,性能更好。 /// /// /// 【为什么需要这个类?】 /// 这是"统一响应格式"的最佳实践: /// - 前端不需要猜测返回格式,所有接口都返回相同结构 /// - 前端分页组件可以直接读取 total 和 rows /// - 错误处理统一:code 不为 200 时显示 msg /// /// /// 数据行类型,例如 HwWeb、HwProductInfo 等 public class HwPortalTableDataInfo { /// /// 状态码,200 表示成功。 /// /// 【C# 语法知识点 - 属性初始化器】 /// public int Code { get; set; } = 200; /// 这里的 = 200 是"属性默认值"。 /// 如果创建对象时不赋值,Code 就自动是 200。 /// /// 对比 Java: /// Java 需要在构造函数里赋默认值: /// private int code = 200; /// 或者: /// public TableDataInfo() { this.code = 200; } /// /// public int Code { get; set; } = 200; /// /// 返回消息。 /// public string Msg { get; set; } = "查询成功"; /// /// 总记录数(用于前端分页计算)。 /// /// 前端分页组件需要知道总共有多少条记录, /// 才能计算总页数 = Math.Ceiling(total / pageSize)。 /// /// public long Total { get; set; } /// /// 当前页的数据列表。 /// /// 【C# 语法知识点 - IReadOnlyList<T>】 /// IReadOnlyList<T> 是"只读列表接口"。 /// 它比 List<T> 更安全,因为调用者不能修改列表内容(不能 Add/Remove)。 /// /// 对比 Java: /// Java 没有内置的只读列表接口,通常用 List<T> 或 Collections.unmodifiableList()。 /// C# 的 IReadOnlyList<T> 是接口级别的只读约束,更清晰。 /// /// /// 【C# 语法知识点 - Array.Empty<T>()】 /// = Array.Empty<T>() 是"空数组的单例"。 /// 每次调用都返回同一个实例,比 new T[0] 更节省内存。 /// /// 这是一个小优化点:避免每次 new 空数组产生垃圾对象。 /// /// public IReadOnlyList Rows { get; set; } = Array.Empty(); }