Можно использовать некоторые различные схемы этого. Я всегда тестировал на arguments.length:
function myFunc(requiredArg, optionalArg){
optionalArg = myFunc.arguments.length<2 ? 'defaultValue' : optionalArg;
...
- выполнение так, это не может возможно перестать работать, но я не знаю, имеет ли Ваш путь шанс сбоя, сейчас я не могу продумать сценарий, где это на самом деле перестало бы работать...
И затем Paul предоставил один провальный сценарий!-)
You need to pass the IEnumerable
query as the second parameter, not the "Author" string, like so:
// Note the new way to initialize collections in C# 3.0.
List<Author> authors = new List<Author> ()
{
new Author { FirstName = "Steven", LastName = "King" }),
new Author { FirstName = "Homer", LastName = "" })
};
// The XML
XElement xml = new XElement("Authors",
from na in this.Authors
select new XElement("Author",
new XElement("First", na.FirstName),
new XElement("Last", na.LastName)));
That will give you the result you need.
Я знаю, что вы используете C #, но это тот случай, когда вам следует серьезно подумать о добавлении проекта VB.NET в свое решение. XML-литералы идеально подходят для этого и делают его намного проще.
Чтобы получить XML из вашего списка авторов, вы должны сделать следующее:
Function GetAuthorsXML(authors As List(Of Author)) As XElement
Return <Authors>
<%= from a in authors _
select <Author>
<First><%= a.FirstName %></First>
<Last><%= a.LastName %></Last>
</Author> %>
</Authors>
End Function