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子句总是创建新列表还是返回提取的列表?
谢谢,
回答您的问题。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
结果。
就我个人而言,我认为第一种选择在大多数情况下更有意义,但如果不了解你的需求,没有人能真正确定。