gpt4 book ai didi

c# - ReactiveList.AddRange(IEnumerable collection) 为集合中的每个项目触发

转载 作者:行者123 更新时间:2023-11-30 16:11:01 25 4
gpt4 key购买 nike

使用 ReactiveUI 6.0.0 并拥有

var myReactiveList = new ReactiveList<SomeType>();

// [...] later I subscribe to the list:

myReactiveList.Changed.Subsribe(_ =>
{
// this will be invoked 10 times, once for each item
// in "myList" added through AddRange(...) below
// eg. count will increase from 1 to 10 on each call
var test = myReactiveList.ToList();
int count = test.Count;
});

// Now I add a couple of items at once
// (eg. aList is a List<SomeType> with say 10 items)
// This will fire 10 times
myReactiveList.AddRange(aList);

问题:这是预期的行为吗?如果是这样,我应该怎么做才能订阅,以便我的观察者仅在添加集合 (AddRange(..)) 时收到一次通知?

编辑:设置 myReactiveList.ResetChangeThreshold = 0; 达到了目的。

编辑 2: 实际上有这个(和其他 react 性东西)的文档,只是埋在 ReactiveUI 的 docs 分支和 docs 该分支中的文件夹:ReactiveList

所以,为了实现我最初想要的,我会这样做:

using (myReactiveList.SuppressChangeNotifications()) {
myReactiveList.AddRange(aList);
}

最佳答案

这由 ResetChangeThreshold 属性控制。默认情况下,只有当您添加超过 10 个项目并且新项目的数量是原始项目的 30% 时,才会在 AddRange 中触发更改抑制。有关详细信息,请参阅 the source .

关于c# - ReactiveList.AddRange(IEnumerable<T> collection) 为集合中的每个项目触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24922878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com