wpf中的where子句

时间:2014-09-15 13:05:17

标签: c# linq

我是WPF的新手,在我的viewmodel中,我定义了一个列表 &安培;我想根据某些条件返回子列表(即我的情况下为30)。 我用过以下方式。

private readonly IEnumerable<int> _numbers;
 _numbers= new List<int>() {30,60};

1. 
public Number
{
 get
{
   return (mynum== 30) ? _numbers.Where(x => x == 30)
                       .ToList()
                    : _numbers;
  }
}

OR
2. 
public Number
{
 get
{
   return (mynum== 30) ? new list<int>() {30}   : _numbers;
  }
}

哪一个是正确的/正确的方法来做到这一点? where子句总是创建新列表还是返回提取列表?

谢谢,

2 个答案:

答案 0 :(得分:0)

这两个例子并不完全相同,因为第一个例子可能会返回&#34; 30&#34; (假设_numbers实际上并没有硬编码到30和60),而第二个只会返回一个30结果。

就我个人而言,我认为第一种选择在大多数情况下更有意义,但如果不了解您的需求,没有人能够肯定地说出来。

答案 1 :(得分:0)

回答你的问题。
Where子句不会返回新列表。它通过将谓词(条件)应用于源的每个元素来返回Enumerable.Iterator<TSource>。因此,您可以从源列表中更改原始项目,因为引用指向相同的对象。

另一方面,应用.ToList()会创建副本,因此您无法伤害原始收藏品:

var copy = source.ToList();

相同
var copy = new List<TSource>(source);

因此,分析您发布的代码,我们在功能上都有相同的代码段。稍微概括一下后它看起来会一样:

public Number
{
   get
   {
      var copy = _numbers.Where(x => x == 30).ToList();
      // which is the same as
      var filteredList = _numbers.Where(x => x == 30);
      copy = new List<int>(filteredList);
      return (mynum == 30) ? copy : _numbers;
   }
}