C# 迭代IObservableList的正确方法是什么<;T>;?

C# 迭代IObservableList的正确方法是什么<;T>;?,c#,loops,reactiveui,C#,Loops,Reactiveui,我正在开发一个利用ReactiveUI和DynamicData的WPF应用程序。我们的大多数列表都是IObservableList类型,有时我们需要订阅此列表上的更改,有时我们需要简单地遍历列表。我关心的是我们是否按照正确的模式遍历这些列表 目前,当我们需要遍历列表时,我们遵循以下模式: // Assuming we have an IObservableList<SomeObject> named objList with some data in it foreach (var

我正在开发一个利用ReactiveUI和DynamicData的WPF应用程序。我们的大多数列表都是IObservableList类型,有时我们需要订阅此列表上的更改,有时我们需要简单地遍历列表。我关心的是我们是否按照正确的模式遍历这些列表

目前,当我们需要遍历列表时,我们遵循以下模式:

// Assuming we have an IObservableList<SomeObject> named objList with some data in it
foreach (var obj in objList.Items)
{
    // some operation on obj
}
//假设我们有一个名为objList的IObservableList,其中包含一些数据
foreach(对象列表项中的var obj)
{
//obj上的一些操作
}
这种模式工作得很好,但我们担心这不是一种“被动”的方式。有什么建议吗


谢谢大家!

使用循环遍历列表。他们每个人都能工作

因为他显然是第一位候选人

虽然有效,但更具写作性

foreach工作-如果您没有开始更改列表。foreach的一个怪癖是,它只对隐藏的枚举数起作用,如果集合发生更改,枚举数将变得无效

一个需要考虑的事情是“重新添加”清单上的“元素添加”通知。通常,它们类缺少AddRange函数


除非您告诉我们您在编写过程中对某些类实例做了什么,以及类的外观,否则我们无法告诉您它是否是“反应式”编程。但对我来说,这似乎只是一个流行语。

嗯,我不太熟悉
IObservableList
,但我在使用
IList
时使用它

我建议在处理动态数据时实现这一点,它可以让您在需要时获得最新的值


查看链接了解更多详细信息。

我想我的问题归结为:除了使用
.Items
范式将其转换为IEnumerable之外,是否还有其他模式可以迭代此类列表。这取决于您是否需要它是被动的。例如,如果你想在列表每次更改时都迭代项,那是另一回事。所以我看到的是,在我们只需要列表的当前状态的情况下,这是正确的方法吗?是的,对于不响应对SourceList的更改的情况,只需对其进行迭代。我最近听说foreach实际上有点慢。实际上是速度的一半。逻辑是有道理的-你有一个额外的枚举器和它的检查要通过-但我不确定JiT是否不能处理这一部分。
迭代IObservableList的正确方法是什么
这取决于…@đěxě341;有什么特别的吗?@đxěxě说我只需要迭代列表也不需要它是被动的来策划一些事情。我只是想知道这是否是一个合适的/被接受的方法。这个问题很模糊,不允许回答,因为你没有说什么是“某种操作”;例如,如果该操作在逻辑上是一个投影,那么您应该使用
Select
而不是循环,并生成一个新的可观察的投影项序列。循环中的操作是什么?我的观点是,操作是什么并不重要。如果操作在逻辑上是一个动作——也就是说,只对其副作用有用,而不是因为它产生了一个值——那么
foreach
是正确的做法。但正如我所说的,如果手术是一个投影,那么这可能不是正确的做法。不要认为这有助于