ObservableList<T>¶
- 种类:
class - 命名空间:
Runestone.AesirArchitecture - 程序集:
Runestone.AesirArchitecture
继承链: System.Object → ObservableList<T>
实现接口: System.Collections.Generic.IReadOnlyList<T>,Runestone.AesirArchitecture.IObservableList<T>,Runestone.AesirArchitecture.IReadOnlyObservableList<T>,System.Collections.Generic.IEnumerable<T>,System.Collections.IEnumerable,System.Collections.Generic.IList<T>,Runestone.AesirArchitecture.IObservableCollection<T>,System.Collections.Generic.ICollection<T>,System.Collections.Generic.IReadOnlyCollection<T>
类型参数
T— 元素类型
声明¶
[DefaultMember]
[Serializable]
public sealed class ObservableList<T> : System.Collections.Generic.IReadOnlyList<T>,
Runestone.AesirArchitecture.IObservableList<T>,
Runestone.AesirArchitecture.IReadOnlyObservableList<T>,
System.Collections.Generic.IEnumerable<T>,
System.Collections.IEnumerable,
System.Collections.Generic.IList<T>,
Runestone.AesirArchitecture.IObservableCollection<T>,
System.Collections.Generic.ICollection<T>,
System.Collections.Generic.IReadOnlyCollection<T>
可观察列表实现。 Model 层持有可写实例,View 层通过 IReadOnlyObservableList{T} 只读订阅。
备注
内部组合 List{T} 存储元素,变更通知经 MiniEvent{T} 分发——Invoke 路径零分配 (直接多播调用)。注意:订阅路径(AddListener / 句柄创建)有与监听者数量成正比的委托分配, 勿在每帧订阅场景使用。 [SerializeField] 标记 items 字段使其可在 Inspector 中编辑初始元素; 反序列化填充不触发任何事件(与 ObservableValue{T} 行为一致)。
变更通知为单一事件(AddListener):写操作完成后才触发,监听者回调中读取到的集合已是变更后的状态; 无变更的操作不通知(Remove 不存在的元素、Clear 空列表、索引器赋相同值); 批量操作(AddRange / InsertRange / RemoveRange)逐项通知; Sort() / Reverse() / Clear 以 Reset 通知(无附加字段,监听方按"重建视图"处理)。
遍历性能:foreach 具体类型走结构体枚举器,零分配;通过 IReadOnlyObservableList{T} / IEnumerable{T} 接口遍历会装箱一次枚举器(与 BCL List{T} 行为一致)。
构造方法¶
| 名称 | 描述 |
|---|---|
ObservableList() |
默认构造,创建空列表。 |
ObservableList(IEnumerable<T>) |
指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。 |
ObservableList(int) |
指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。 |
ObservableList()¶
默认构造,创建空列表。
ObservableList(IEnumerable)¶
指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
initialItems |
IEnumerable<T> |
初始元素序列。 |
ObservableList(int)¶
指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
capacity |
int |
— |
属性¶
| 名称 | 描述 |
|---|---|
Item |
读写指定索引的元素。值变化时触发 Replace 通知,相同则不通知。 |
IsReadOnly |
固定返回 false,该集合可写。 |
Count |
元素数量。 |
Item¶
读写指定索引的元素。值变化时触发 Replace 通知,相同则不通知。
备注
使用 EqualityComparer{T}.Default 判断值是否变化,仅在变化时触发通知。
IsReadOnly¶
固定返回 false,该集合可写。
Count¶
元素数量。
方法¶
声明的方法
| 名称 | 描述 |
|---|---|
AddListener(Action<CollectionChangedEventArgs<T>>) |
— |
GetEnumerator() |
返回遍历元素的结构体枚举器,foreach 具体类型时零分配。 |
Contains(T) |
判断是否包含指定元素。 |
Remove(T) |
移除第一个匹配元素,成功时触发 Remove 通知。 |
IndexOf(T) |
返回指定元素的索引;不存在时返回 -1。 |
Add(T) |
在末尾添加元素,触发 Add 通知(索引为 Count - 1)。 |
AddRange(IEnumerable<T>) |
批量添加元素。逐项添加并逐项触发 Add 通知。 |
AddRange(T[]) |
批量添加数组元素,逐项触发 Add 通知。 |
Clear() |
清空列表。列表非空时以 Reset 通知;已为空时不通知。 |
ClearListeners() |
清空所有变更监听。 |
CopyTo(T[], int) |
从指定数组索引开始复制元素到目标数组。 |
ForEach(Action<T>) |
对每个元素执行指定操作。 |
Insert(int, T) |
在指定索引插入元素,触发 Add 通知(索引为插入位置)。 |
InsertRange(int, IEnumerable<T>) |
在指定索引插入元素序列,逐项触发 Add 通知。 |
InsertRange(int, T[]) |
在指定索引插入数组元素,逐项触发 Add 通知。 |
Move(int, int) |
把元素从 oldIndex 移动到 newIndex,触发单次 Move 通知。 |
RemoveAt(int) |
移除指定索引的元素,触发 Remove 通知(参数含移除前索引与被移除元素)。 |
RemoveListener(Action<CollectionChangedEventArgs<T>>) |
— |
RemoveRange(int, int) |
从指定索引移除指定数量的元素,逐项触发 Remove 通知(按原始顺序,索引为移除前位置)。 |
Reverse() |
反转全表,以 Reset 通知(少于 2 个元素时反转无变化,不通知)。 |
Sort() |
对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。 |
Sort(IComparer<T>) |
使用指定比较器对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。 |
继承的方法
| 名称 | 描述 | 声明类型 |
|---|---|---|
GetType() |
— | object |
Equals(object) |
— | object |
GetHashCode() |
— | object |
ToString() |
— | object |
MemberwiseClone() |
— | object |
Finalize() |
— | object |
AddListener(Action<CollectionChangedEventArgs>)¶
参数
| 名称 | 类型 | 说明 |
|---|---|---|
callback |
Action<CollectionChangedEventArgs<T>> |
— |
返回值
| 类型 | 说明 |
|---|---|
AutoRemoveListenerHandle |
— |
GetEnumerator()¶
返回遍历元素的结构体枚举器,foreach 具体类型时零分配。
返回值
| 类型 | 说明 |
|---|---|
ObservableList<T>.Enumerator<T> |
元素枚举器。 |
Contains(T)¶
判断是否包含指定元素。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
item |
T |
要查找的元素。 |
返回值
| 类型 | 说明 |
|---|---|
bool |
包含返回 true,否则返回 false。 |
Remove(T)¶
移除第一个匹配元素,成功时触发 Remove 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
item |
T |
要移除的元素。 |
返回值
| 类型 | 说明 |
|---|---|
bool |
找到并移除返回 true;元素不存在时不触发通知,返回 false。 |
IndexOf(T)¶
返回指定元素的索引;不存在时返回 -1。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
item |
T |
要查找的元素。 |
返回值
| 类型 | 说明 |
|---|---|
int |
元素索引或 -1。 |
Add(T)¶
在末尾添加元素,触发 Add 通知(索引为 Count - 1)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
item |
T |
要添加的元素。 |
AddRange(IEnumerable)¶
批量添加元素。逐项添加并逐项触发 Add 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
itemsToAdd |
IEnumerable<T> |
要添加的元素序列。 |
AddRange(T[])¶
批量添加数组元素,逐项触发 Add 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
itemsToAdd |
T[] |
要添加的元素数组。 |
Clear()¶
清空列表。列表非空时以 Reset 通知;已为空时不通知。
ClearListeners()¶
清空所有变更监听。
备注
清除全部监听引用,防止因监听者未释放导致的内存泄漏。 与 Clear 不同——后者清空的是列表元素。
CopyTo(T[], int)¶
从指定数组索引开始复制元素到目标数组。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
array |
T[] |
目标数组。 |
arrayIndex |
int |
目标数组起始索引。 |
ForEach(Action)¶
对每个元素执行指定操作。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
action |
Action<T> |
对每个元素执行的操作。 |
Insert(int, T)¶
在指定索引插入元素,触发 Add 通知(索引为插入位置)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
index |
int |
插入位置索引。 |
item |
T |
要插入的元素。 |
InsertRange(int, IEnumerable)¶
在指定索引插入元素序列,逐项触发 Add 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
index |
int |
插入位置索引。 |
itemsToInsert |
IEnumerable<T> |
要插入的元素序列。 |
InsertRange(int, T[])¶
在指定索引插入数组元素,逐项触发 Add 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
index |
int |
插入位置索引。 |
itemsToInsert |
T[] |
要插入的元素数组。 |
Move(int, int)¶
把元素从 oldIndex 移动到 newIndex,触发单次 Move 通知。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
oldIndex |
int |
元素当前索引。 |
newIndex |
int |
目标索引。 |
RemoveAt(int)¶
移除指定索引的元素,触发 Remove 通知(参数含移除前索引与被移除元素)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
index |
int |
要移除元素的索引。 |
RemoveListener(Action<CollectionChangedEventArgs>)¶
参数
| 名称 | 类型 | 说明 |
|---|---|---|
callback |
Action<CollectionChangedEventArgs<T>> |
— |
RemoveRange(int, int)¶
从指定索引移除指定数量的元素,逐项触发 Remove 通知(按原始顺序,索引为移除前位置)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
index |
int |
起始索引。 |
count |
int |
移除数量。 |
Reverse()¶
反转全表,以 Reset 通知(少于 2 个元素时反转无变化,不通知)。
Sort()¶
对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。
Sort(IComparer)¶
使用指定比较器对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。
参数
| 名称 | 类型 | 说明 |
|---|---|---|
comparer |
IComparer<T> |
元素比较器。 |
Additional Notes¶
首个
## Additional Notes是增量生成文档标识符,请勿修改标题级别和内容!本文档由Script Doc Generator辅助生成。