2016-09-14 3 views
3

Gibt es eine einfache Möglichkeit, zwei NameSyntax-Objekte in einem QualifiedName-Objekt zu kombinieren?Kombinieren Sie zwei qualifizierte Namen

Der folgende Code funktioniert nicht, da die SyntaxFactory.QualifiedName-Methode ein SimpleNameSyntax-Objekt als zweites Argument erwartet.

NameSyntax part1 = SyntaxFactory.QualifiedName(SyntaxFactory.IdentifierName("Part1"), SyntaxFactory.IdentifierName("Part2")); 
NameSyntax part2 = SyntaxFactory.QualifiedName(SyntaxFactory.IdentifierName("Part3"), SyntaxFactory.IdentifierName("Part4")); 

QualifiedNameSyntax combined = SyntaxFactory.QualifiedName(part1, part2); 

Dies könnte eine Lösung sein, aber ich habe das Gefühl, dass es ein besserer Weg geben, ohne das ToString und analysiert:

NameSyntax combined = SyntaxFactory.ParseName(part1.ToString() + "." + part2.ToString()); 

Antwort

2

Ich glaube nicht, dass Sie jede API finden Methoden dafür. Aber Sie können folgendes versuchen

public QualifiedNameSyntax Combine(NameSyntax left, NameSyntax right) 
{ 
    var qn = right as QualifiedNameSyntax; 
    if (qn != null) 
    { 
    return SyntaxFactory.QualifiedName(Combine(left, qn.Left), qn.Right); 
    } 

    var sn = right as SimpleNameSyntax; 
    if (sn != null) 
    { 
    return SyntaxFactory.QualifiedName(left, sn); 
    } 

    throw new NotSupportedException(); 
}