【发布时间】:2011-06-09 18:06:27
【问题描述】:
我有一个不可变的列表。
在下面的 g.Select(...) 中,我执行了一个放入 MemberIdList 的 .ToList()。我不想用 ToList() 创建一个新列表,而是想将每个 r.Field 字符串添加到单元对象内的不可变列表中。
我该怎么做?
var groupedCollection = table.AsEnumerable()
.GroupBy(row => new
{
UType = row.Field<string>("UnitType"),
UZoom = row.Field<string>("UnitZoom"),
MZoom = row.Field<string>("MemberZoom"),
});
var unitCollection = groupedCollection
.Select(g => new Unit
{
UnitType = g.Key.UType,
UnitZoom = g.Key.UZoom,
MemberZoom = g.Key.MZoom,
MemberIdList = g.Select(r => r.Field<string>("TestId")).ToList(),
});
List<Unit> units = unitCollection.ToList();
public class Unit
{
public Unit()
{
MemberIdList = new List<String>();
}
public String UnitType { get; set; }
public String UnitZoom { get; set; }
public String MemberZoom { get; set; }
public int MemberOrder { get; set; }
public List<String> MemberIdList { get; private set; }
}
【问题讨论】:
-
在我的上下文中 MemberIdList.AddRange(g.Select(r => r.Field
("TestId")));不起作用。键入 MemberIdList。没有 AddRange。 -
@msfanboy 你确定那是
List<T>吗?因为那肯定有 AddRange。您当然需要告诉它实例,即Obj.MemberIdList.AddRange() -
顺便说一句;
List<T>绝不是一成不变的。没有 setter 的列表属性与不可变列表非常不同。 -
但我有私人二传手??
-
@msfanboy 这样吗?这只是意味着您不能将其更改为 不同 列表。我仍然可以调用 yourList.Add(x) - list 在内部不是不可变的。
标签: c# list select extension-methods immutability