I have the following code which works great returns a XElement object from instance properties on the class:
public MyClass1 MyClass1 {get; set;}
public MyClass2 MyClass2 {get; set;}
var elements = new[]
{
//Calls to .GetXML() return an XElement instance
this.MyClass1.GetXML(),
this.MyClass2.GetXML()
};
return new XElement("Root",
elements.Where(el => el != null && !el.IsEmpty));
Problem is I want to introduce a collection via IList for say MyClass3 and have no idea on how to get all of the items in the collection into my elements array. So I want the following 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 and even changed IList into List just to see if .ForEach would work and that didn’t either. The error I’m getting is: “No best type found for implicitly typed array” regardless of the method I try.
How can I get all of the elements from my IList property instance into the elements array? Any help is appreciated, thanks!
EDIT: Order must be preserved (i.e. MyClass1, MyClass2, MyClass3), so If I introduce another element MyClass4 it must come after MyClass3. The reasoning is because I’m composing a XML document with a specific structure.
I suspect you want something like:
With MyClass4 after MyClass3:
Or putting the
GetXMLin one place:Or without using LINQ at all until the end: