wpf中的where子句

本文关键字:子句 where 中的 wpf | 更新日期: 2023-09-27 18:21:51

我是WPF的新手,在我的视图模型中,我定义了一个列表&基于某些条件,我想返回子列表(即在我的情况下为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子句总是创建新列表还是返回提取的列表?

谢谢,

wpf中的where子句

回答您的问题。
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;
   }
}

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

就我个人而言,我认为第一种选择在大多数情况下更有意义,但如果不了解你的需求,没有人能真正确定。