【发布时间】:2015-04-01 13:35:59
【问题描述】:
我有以下方法。
public IEnumerable<Item> ChangeValueIEnumerable()
{
var items = new List<Item>(){
new Item("Item1", 1),
new Item("Item2", 1),
new Item("Item3", 2),
new Item("Item4", 2),
new Item("Item5", 3)
};
var groupedItems = items.GroupBy(i => i.Value)
.Select(x => new Item(x.First().Name, x.Key));
foreach (var item in groupedItems)
{
item.CalculatedValue = item.Name + item.Value;
}
return groupedItems;
}
在groupedItems 集合中,CalculatedValues 为空。但是,如果我在GroupBy 之后的Select 句子中添加ToList(),则CalculatedValues 具有值。
例如:
var groupedItems = items.GroupBy(i => i.Value)
.Select(x => new Item(x.First().Name, x.Key)).ToList();
所以,问题是。为什么是这样?我想知道这个原因,我的解决方案是添加一个ToList()
更新:Item 类的定义如下
public class Item
{
public string Name { get; set; }
public int Value { get; set; }
public string CalculatedValue { get; set; }
public Item(string name, int value)
{
this.Name = name;
this.Value = value;
}
}
【问题讨论】:
-
你能发布
Item类的定义吗? -
@Enigmativity 我已经添加了 Item 类。谢谢
-
顺便说一句,按照惯例,由于
Item接受构造函数参数,您应该考虑将关联属性Name和Value标记为private set,或者甚至更好,使用readonly支持字段来表达不变性。
标签: c# linq linq-group