c# - What are the alternative ways to get list of two properties values -


what alternative ways of achieving same result produced this:

mycollection.select(item => item.firstvalue)   .concat(mycollection.select(item => item.secondvalue)).tolist(); 

the scenario collection<myclass> named mycollection containing instances of myclass (see below). want create list<int> instance contains myclass.firstvalue , myclass.secondvalue each item in mycollection.

public class myclass {     public int firstvalue { get; set; }     public int secondvalue {get; set; } } 

you might try this, linqy single-pass solution:

private ienumerable<int> flatten(myclass instance ) {   yield return instance.value1 ;   yield return instance.value2 ; }  ...  list<int> ints = myclasses.selectmany( x => flatten(x) ).tolist() ; 

the flatten function has real method can't use yield return in closure lest error

error cs1621: yield statement cannot used inside anonymous method or lambda expression

i doubt linq solution better, simpler, more efficient, easier understand or else obvious solution:

list<int> ints = new list<int>() ; foreach( myclass item in myclasses ) {   ints.add(item.value1) ;   ints.add(item.value2) ; } 

i doubt linq solution faster. if collection of myclass objects can report size cheaply (e.g., w/o traversing collection), can optimize above bit more pre-allocating list required size:

list<int> ints = new list<int>( 2 * myclasses.count ) ; foreach( myclass item in myclasses ) {   ints.add(item.value1) ;   ints.add(item.value2) ; } 

that save time required re-allocate , copy each time list's backing store has resized.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -