2016-09-14 2 views
3

Есть ли простой способ объединить два объекта NameSyntax в один объект QualifiedName?Объединить два квалифицированных имени

Следующий код не работает, так как метод SyntaxFactory.QualifiedName ожидает, что объект SimpleNameSyntax станет вторым аргументом.

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); 

Это может быть решение, но у меня есть ощущение, что там должно быть лучше, без ToString и разобрать:

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

ответ

2

Я не думаю, что вы найдете любой API методы для этого. Но вы можете попробовать следующее:

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(); 
} 
Смежные вопросы