C# ViewModel是否可以具有IEnumerable类型的属性<&燃气轮机;而不是数组
我通常这样构造我的C# ViewModel是否可以具有IEnumerable类型的属性<&燃气轮机;而不是数组,c#,properties,viewmodel,ienumerable,lazy-evaluation,C#,Properties,Viewmodel,Ienumerable,Lazy Evaluation,我通常这样构造我的ViewModel: MyViewModel { (...) IEnumerable<MyClass> Items {get; set;} } 有时懒惰的评估会导致一些问题 我是否应该关心(害怕)我没有传递下面代码中已经评估过的值? 不,因为你哪儿都不能超过他们。更清楚地说,在视图中计算的代码是在服务器端计算和运行的,因此在这里使用IEnumerable没有什么错。您可以在视图中管理这些问题中的任何一个,就像在其他任何地方一样。事实上,如果它是一个非常大的
ViewModel
:
MyViewModel {
(...)
IEnumerable<MyClass> Items {get; set;}
}
有时懒惰的评估会导致一些问题
我是否应该关心(害怕)我没有传递下面代码中已经评估过的值?
不,因为你哪儿都不能超过他们。更清楚地说,在视图
中计算的代码是在服务器端计算和运行的,因此在这里使用IEnumerable
没有什么错。您可以在视图中管理这些问题中的任何一个,就像在其他任何地方一样。事实上,如果它是一个非常大的列表,它可能会更有效
我是否应该关心(害怕)我没有传递下面代码中已经评估过的值?
不,因为你哪儿都不能超过他们。更清楚地说,在
视图
中计算的代码是在服务器端计算和运行的,因此在这里使用IEnumerable
没有什么错。您可以在视图中管理这些问题中的任何一个,就像在其他任何地方一样。事实上,如果它是一个非常大的列表,它可能会更有效 只要确保在视图模型构造函数中重新创建IEnumerable的具体实例,就不会有任何问题。列表将为空。只要确保在视图模型构造函数中重新创建IEnumerable的具体实例,就不会有任何问题。列表将是空的
我是否应该关心(害怕)我没有通过评估
下面代码中的值
至少,您应该记住,枚举数可能是无限的:
public class MyViewModel
{
public IEnumerable<int> Numbers
{
get
{
while (true)
{
yield return 0;
}
}
}
}
公共类MyViewModel
{
公数
{
得到
{
while(true)
{
收益率为0;
}
}
}
}
但是,事实上,这并不是拒绝惰性枚举属性的原因。这只是一个需要更加小心的理由
我是否应该关心(害怕)我没有通过评估
下面代码中的值
至少,您应该记住,枚举数可能是无限的:
public class MyViewModel
{
public IEnumerable<int> Numbers
{
get
{
while (true)
{
yield return 0;
}
}
}
}
公共类MyViewModel
{
公数
{
得到
{
while(true)
{
收益率为0;
}
}
}
}
但是,事实上,这并不是拒绝惰性枚举属性的原因。这只是一个需要更加小心的理由。如果你有选择,千万不要绑定到IEnumerable
绑定IList到项控件不IEnumerable如果您真正关心性能,请阅读更多内容如果您有选择,请不要绑定到IEnumerable 绑定IList到ItemsControl非IEnumerable如果您真正关心性能,请阅读更多内容