Extending and filtering C # arrays

Recently, I have been doing a lot of conversions List<SomeType> β†’ SomeType[] , especially when I filter or expand arrays.

For example, filtering:

 // 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); 

or extension:

 // 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; 

I need to use arrays (MemberType []) instead of a nice generic collection due to the XML serialization classes used. I am sure there is a better way to do this simply, so if you know one (which does not add unnecessary complexity), let me know.

+4
source share
5 answers
 members = memberList.Where(m => m.someProperty != sentinelValue).ToArray(); members = members.Concat(new[] { newMember }).ToArray(); 
+3
source

Extension methods exist to exactly accomplish what you described:

 var membersList = members.ToArray(); 
+5
source

The List<T> class provides a ToArray() method that returns list items as an array. Just like the other way, if you are using .NET 3.5, you can use Linq to shorten your filter code to do this effectively:

 members = members.Where(m => m.someProperty != sentinalValue).ToArray(); 
+2
source

Linq to the rescue!

Filtration:

 members = members.Where(m => m.someProperty != sentinalValue).ToArray(); 

Expansion:

 members = members.Concat(new [] {newMember}).ToArray(); 
+2
source

Besides what has already been pointed out by others, there is also System.Array.Resize () if you want to skip the step of converting to a list.

But seriously, your XML serialization classes need to be thrown away and rewritten.

+1
source

Source: https://habr.com/ru/post/1390724/


All Articles