TWT
TWT

Reputation: 2591

Combine two qualified names

Is there an easy way to combine two NameSyntax objects into one QualifiedName object?

The following code is not working, because the SyntaxFactory.QualifiedName method is expecting a SimpleNameSyntax object as second argument.

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

This could be a solution, but I have the feeling that there must be a better way, without the ToString and parse:

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

Upvotes: 3

Views: 254

Answers (1)

Tamas
Tamas

Reputation: 6420

I don't think you'll find any API methods for this. But you can try the following

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

Upvotes: 2

Related Questions