跳转至

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()

默认构造,创建空列表。

public ObservableList<T>()

ObservableList(IEnumerable)

指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。

public ObservableList<T>(IEnumerable<T> initialItems)

参数

名称 类型 说明
initialItems IEnumerable<T> 初始元素序列。

ObservableList(int)

指定初始元素构造。初始元素不触发变更通知(语义同反序列化填充)。

public ObservableList<T>(int capacity)

参数

名称 类型 说明
capacity int —

属性

名称 描述
Item 读写指定索引的元素。值变化时触发 Replace 通知,相同则不通知。
IsReadOnly 固定返回 false,该集合可写。
Count 元素数量。

Item

读写指定索引的元素。值变化时触发 Replace 通知,相同则不通知。

备注

使用 EqualityComparer{T}.Default 判断值是否变化,仅在变化时触发通知。

public T Item { get; set; }

IsReadOnly

固定返回 false,该集合可写。

public bool IsReadOnly { get; }

Count

元素数量。

public int Count { get; }

方法

声明的方法

名称 描述
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>)

public AutoRemoveListenerHandle AddListener(Action<CollectionChangedEventArgs<T>> callback)

参数

名称 类型 说明
callback Action<CollectionChangedEventArgs<T>> —

返回值

类型 说明
AutoRemoveListenerHandle —

GetEnumerator()

返回遍历元素的结构体枚举器,foreach 具体类型时零分配。

public ObservableList<T>.Enumerator<T> GetEnumerator()

返回值

类型 说明
ObservableList<T>.Enumerator<T> 元素枚举器。

Contains(T)

判断是否包含指定元素。

public bool Contains(T item)

参数

名称 类型 说明
item T 要查找的元素。

返回值

类型 说明
bool 包含返回 true,否则返回 false。

Remove(T)

移除第一个匹配元素,成功时触发 Remove 通知。

public bool Remove(T item)

参数

名称 类型 说明
item T 要移除的元素。

返回值

类型 说明
bool 找到并移除返回 true;元素不存在时不触发通知,返回 false。

IndexOf(T)

返回指定元素的索引;不存在时返回 -1。

public int IndexOf(T item)

参数

名称 类型 说明
item T 要查找的元素。

返回值

类型 说明
int 元素索引或 -1。

Add(T)

在末尾添加元素,触发 Add 通知(索引为 Count - 1)。

public void Add(T item)

参数

名称 类型 说明
item T 要添加的元素。

AddRange(IEnumerable)

批量添加元素。逐项添加并逐项触发 Add 通知。

public void AddRange(IEnumerable<T> itemsToAdd)

参数

名称 类型 说明
itemsToAdd IEnumerable<T> 要添加的元素序列。

AddRange(T[])

批量添加数组元素,逐项触发 Add 通知。

public void AddRange(T[] itemsToAdd)

参数

名称 类型 说明
itemsToAdd T[] 要添加的元素数组。

Clear()

清空列表。列表非空时以 Reset 通知;已为空时不通知。

public void Clear()

ClearListeners()

清空所有变更监听。

备注

清除全部监听引用,防止因监听者未释放导致的内存泄漏。 与 Clear 不同——后者清空的是列表元素。

public void ClearListeners()

CopyTo(T[], int)

从指定数组索引开始复制元素到目标数组。

public void CopyTo(T[] array, int arrayIndex)

参数

名称 类型 说明
array T[] 目标数组。
arrayIndex int 目标数组起始索引。

ForEach(Action)

对每个元素执行指定操作。

public void ForEach(Action<T> action)

参数

名称 类型 说明
action Action<T> 对每个元素执行的操作。

Insert(int, T)

在指定索引插入元素,触发 Add 通知(索引为插入位置)。

public void Insert(int index, T item)

参数

名称 类型 说明
index int 插入位置索引。
item T 要插入的元素。

InsertRange(int, IEnumerable)

在指定索引插入元素序列,逐项触发 Add 通知。

public void InsertRange(int index, IEnumerable<T> itemsToInsert)

参数

名称 类型 说明
index int 插入位置索引。
itemsToInsert IEnumerable<T> 要插入的元素序列。

InsertRange(int, T[])

在指定索引插入数组元素,逐项触发 Add 通知。

public void InsertRange(int index, T[] itemsToInsert)

参数

名称 类型 说明
index int 插入位置索引。
itemsToInsert T[] 要插入的元素数组。

Move(int, int)

把元素从 oldIndex 移动到 newIndex,触发单次 Move 通知。

public void Move(int oldIndex, int newIndex)

参数

名称 类型 说明
oldIndex int 元素当前索引。
newIndex int 目标索引。

RemoveAt(int)

移除指定索引的元素,触发 Remove 通知(参数含移除前索引与被移除元素)。

public void RemoveAt(int index)

参数

名称 类型 说明
index int 要移除元素的索引。

RemoveListener(Action<CollectionChangedEventArgs>)

public void RemoveListener(Action<CollectionChangedEventArgs<T>> callback)

参数

名称 类型 说明
callback Action<CollectionChangedEventArgs<T>> —

RemoveRange(int, int)

从指定索引移除指定数量的元素,逐项触发 Remove 通知(按原始顺序,索引为移除前位置)。

public void RemoveRange(int index, int count)

参数

名称 类型 说明
index int 起始索引。
count int 移除数量。

Reverse()

反转全表,以 Reset 通知(少于 2 个元素时反转无变化,不通知)。

public void Reverse()

Sort()

对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。

public void Sort()

Sort(IComparer)

使用指定比较器对全表排序,以 Reset 通知(少于 2 个元素时排序无变化,不通知)。

public void Sort(IComparer<T> comparer)

参数

名称 类型 说明
comparer IComparer<T> 元素比较器。

Additional Notes

首个 ## Additional Notes 是增量生成文档标识符,请勿修改标题级别和内容!本文档由 Script Doc Generator 辅助生成。