我一般ViewModel
是这样构建的:
MyViewModel {
(...)
IEnumerable<MyClass> Items {get; set;}
}
我是否应该关心(害怕)我没有像下面的代码那样传递已经评估过的值?
MyViewModel {
MyClass[] Items {get; set;}
}
有时惰性求值会导致一些问题。
我一般ViewModel
是这样构建的:
MyViewModel {
(...)
IEnumerable<MyClass> Items {get; set;}
}
我是否应该关心(害怕)我没有像下面的代码那样传递已经评估过的值?
MyViewModel {
MyClass[] Items {get; set;}
}
有时惰性求值会导致一些问题。
只需确保在视图模型构造函数中新建 IEnumerable 的具体实例,就不会出现任何问题。该列表将是空的。
我是否应该关心(害怕)我没有像下面的代码那样传递已经评估的值?
不,因为你没有在任何地方传递它们。更清楚地说,在 中评估的代码View
是在服务器端评估并运行的,所以在IEnumerable
这里使用没有错。您可以像在其他任何地方一样管理视图中的任何这些问题。事实上,如果它是一个非常大的列表,它可能会更有效!
我是否应该关心(害怕)我没有像下面的代码那样传递已经评估的值?
至少,您应该记住,枚举器可以是无穷无尽的:
public class MyViewModel
{
public IEnumerable<int> Numbers
{
get
{
while (true)
{
yield return 0;
}
}
}
}
但是,确实,这不是拒绝惰性枚举属性的理由。这只是一个需要更加小心的理由。
如果你有选择,永远不要绑定到 IEnumerable。
将IList绑定到ItemsControl而不是IEnumerable如果您真的关心性能,请在此处 阅读更多信息