合并两个限定名称

Combine two qualified names

有没有一种简单的方法可以将两个 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());

我认为您找不到任何 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();
}