我一直在做很多List<SomeType>
- &gt;最近SomeType[]
转换,尤其是当我过滤或扩展数组时。
例如过滤:
// filter the list
var memberList = new List<MemberType>();
foreach (var member in members)
{
if (member.someProperty != sentinalValue)
{
memberList.Add(member);
}
}
// overwrite the old array with a new on dimensioned correctly
members = new MemberType[memberList.Count];
memberList.CopyTo(members);
或延伸:
// create the new member
var newMember = new MemeberType();
// create a new array to hold the extended members
newMembers = new MemberType[members.Length + 1];
// copy over the old members
members.CopyTo(newMembers, 0);
// add the new member
newMembers[members.Length] = newMember;
// overwrite old array with new array containing new member
members = newMembers;
由于我们使用的XML Serialization类,我必须使用数组(MemberType [])而不是一个很好的泛型集合。我相信有一种更好的方法来做这种简单的事情,所以如果你知道一个(不会增加不必要的复杂性)让我知道。
答案 0 :(得分:5)
有一些扩展方法可以完全按照您的描述进行操作:
var membersList = members.ToArray();
答案 1 :(得分:3)
members = memberList.Where(m => m.someProperty != sentinelValue).ToArray();
members = members.Concat(new[] { newMember }).ToArray();
答案 2 :(得分:2)
List<T>
类提供ToArray()
方法,该方法将列表项作为数组返回。另外,如果您使用的是.NET 3.5,那么您可以使用Linq来缩短您的过滤器代码以实现此目的:
members = members.Where(m => m.someProperty != sentinalValue).ToArray();
答案 3 :(得分:2)
Linq救援!
过滤
members = members.Where(m => m.someProperty != sentinalValue).ToArray();
扩展:
members = members.Concat(new [] {newMember}).ToArray();
答案 4 :(得分:1)
除了其他人已经指出的内容之外,如果你想跳过转换为列表步骤,还有System.Array.Resize()。
但严重的是,您的XML序列化类需要被丢弃并重写。