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

绑定IListItemsControlIEnumerable如果您真正关心性能,请阅读更多内容