合并两个合格的名字

时间:2016-09-14 09:25:58

标签: c# roslyn roslyn-code-analysis

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

1 个答案:

答案 0 :(得分: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();
}