扩展和过滤C#数组
本文关键字:数组 过滤 扩展 | 更新日期: 2023-09-27 18:20:05
我最近做了很多List<SomeType>
->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序列化类,所以我不得不使用数组(MemberType[]),而不是漂亮的泛型集合。我相信有一种更好的方法可以做这种简单的事情,所以如果你知道一种(不会增加过度的复杂性),请告诉我。
有一些扩展方法可以做到您所描述的:
var membersList = members.ToArray();
members = memberList.Where(m => m.someProperty != sentinelValue).ToArray();
members = members.Concat(new[] { newMember }).ToArray();
List<T>
类提供了一个ToArray()
方法,该方法将列表项作为数组返回。另外,如果你使用的是.NET 3.5,你可以使用Linq来缩短你的过滤代码,以有效地做到这一点:
members = members.Where(m => m.someProperty != sentinalValue).ToArray();
Linq来营救!
过滤:
members = members.Where(m => m.someProperty != sentinalValue).ToArray();
扩展:
members = members.Concat(new [] {newMember}).ToArray();
除了其他人已经指出的之外,如果你想跳过转换到列表的步骤,还有System.Array.Resize()。
但说真的,您的XML序列化类需要扔掉并重写。