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