合并两个限定名称
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();
}
有没有一种简单的方法可以将两个 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();
}