public override NLGElement BuildElement() { PartOfSpeechBuilder[] orderedPartsOfSpeech = GetElementsOfTypeInSubtree <PartOfSpeechBuilder>() .OrderBy(child => child) .ToArray(); StringBuilder stringValue = new StringBuilder(); for (int childIndex = 0; childIndex < orderedPartsOfSpeech.Length - 1; childIndex++) { AddPartOfSpeech(orderedPartsOfSpeech[childIndex]); stringValue.Append(" "); } AddPartOfSpeech(orderedPartsOfSpeech.Last()); NominalModifier.val = stringValue.ToString(); return(NominalModifier); void AddPartOfSpeech(PartOfSpeechBuilder partOfSpeech) { if (partOfSpeech is WordElementBuilder) { WordElementBuilder eachWord = (WordElementBuilder)partOfSpeech; stringValue.Append(eachWord.BuildWord().Base); } } }