Tuesday, 15 July 2014

c# - How to get all elements in collection when building an array of items? -



c# - How to get all elements in collection when building an array of items? -

i have next code works great returns xelement object instance properties on class:

public myclass1 myclass1 {get; set;} public myclass2 myclass2 {get; set;} var elements = new[] { //calls .getxml() homecoming xelement instance this.myclass1.getxml(), this.myclass2.getxml() }; homecoming new xelement("root", elements.where(el => el != null && !el.isempty));

problem want introduce collection via ilist myclass3 , have no thought on how of items in collection elements array. want next now:

public myclass1 myclass1 {get; set;} public myclass2 myclass2 {get; set;} public ilist<myclass3> myclass3 {get; set;} var elements = new[] { this.myclass1.getxml(), this.myclass2.getxml(), this.myclass3.tolist().select(x => x.getxml()) //not working };

i have tried using combinations of select , changed ilist list see if .foreach work , didn't either. error i'm getting is: "no best type found implicitly typed array" regardless of method try.

how can of elements ilist property instance elements array? help appreciated, thanks!

edit: order must preserved (i.e. myclass1, myclass2, myclass3), if introduce element myclass4 must come after myclass3. reasoning because i'm composing xml document specific structure.

i suspect want like:

var elements = new[] { myclass1.getxml(), myclass2.getxml() } .concat(myclass3.select(x => x.getxml()) .toarray();

with myclass4 after myclass3:

var elements = new[] { myclass1.getxml(), myclass2.getxml() } .concat(myclass3.select(x => x.getxml()) .concat(new[] { myclass4.getxml() }) .toarray();

or putting getxml in 1 place:

// relies on covariance in .net 4 var elements = new mybase[] { myclass1, myclass2 } .concat(myclass3) .concat(new[] { myclass4 }) .select(x => x.getxml()) .toarray();

or without using linq @ until end:

var items = new list<baseclass>(); items.add(myclass1); items.add(myclass2); items.addrange(myclass3); items.add(myclass4); var elemets = items.select(x => x.getxml()).toarray();

c# linq

No comments:

Post a Comment