我是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子句总是创建新列表还是返回提取列表?
谢谢,
答案 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;
}
}