ViewModel可以有IEnumerable<>而不是Array

本文关键字:Array IEnumerable ViewModel | 更新日期: 2023-09-27 18:13:36

我通常这样构建我的ViewModel:

MyViewModel {
  (...)
  IEnumerable<MyClass> Items {get; set;}
}

我应该关心(害怕),我没有传递一个已经计算值像下面的代码?

MyViewModel {
  MyClass[] Items {get; set;}
}

有时懒惰求值会导致一些问题

ViewModel可以有IEnumerable<>而不是Array

只要确保在视图模型构造函数中创建IEnumerable的具体实例,就不会有任何问题。

我是否应该关心(害怕)我没有传递已经计算过的值,就像下面的代码一样?

不,因为你没有将它们传递到任何地方。更清楚地说,在View中求值的代码是在服务器端求值并运行的,因此在这里使用IEnumerable没有任何问题。你可以在视图中管理这些问题,就像在其他地方一样。事实上,如果它是一个非常大的列表,它可能会更有效!

我应该担心(害怕)我没有通过已经评估过的考试吗值像下面的代码?

至少,您应该记住,枚举数可以是无限的:

public class MyViewModel
{
    public IEnumerable<int> Numbers
    {
        get
        {
            while (true)
            {
                yield return 0;
            }
        }
    }
}

但是,这并不是拒绝惰性枚举属性的理由。

如果可以选择,永远不要绑定IEnumerable。

IList绑定到ItemsControl not IEnumerable如果您真的关心性能