2016-09-14 54 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(); 
}