【发布时间】:2023-01-18 04:42:03
【问题描述】:
我想重命名一个类、它的基类和它支持的接口。例如我想重写这个:-
public class CustomerDAL : DALBase, ICustomerDAL
对此:-
public class CustomerRepository : RepositoryBase, ICustomerRepository
所以我写了这个 CSharpSyntaxRewriter:-
public class RenameBaseClassAndInterface : CSharpSyntaxRewriter
{
public override SyntaxNode VisitClassDeclaration(ClassDeclarationSyntax node)
{
if (node.Identifier.Text.Contains("DAL"))
{
string className = node.Identifier.Text.Replace("DAL", "Repository");
node = node.ReplaceToken(node.Identifier, SyntaxFactory.Identifier(className));
if (node.BaseList != null && node.BaseList.Types != null)
{
foreach (BaseTypeSyntax baseTypeSyntax in node.BaseList.Types)
{
TypeSyntax typeSyntax = baseTypeSyntax.Type;
IdentifierNameSyntax identifierNameSyntax = (IdentifierNameSyntax)typeSyntax;
if (identifierNameSyntax.Identifier.ToString() == "DALBase")
{
node = node.ReplaceToken(identifierNameSyntax.Identifier, SyntaxFactory.Identifier("RepositoryBase"));
}
else if (identifierNameSyntax.Identifier.ToString().Contains("DAL"))
{
string repositoryInterfaceName = identifierNameSyntax.Identifier.ToString().Replace("DAL", "Repository");
node = node.ReplaceToken(identifierNameSyntax.Identifier, SyntaxFactory.Identifier(repositoryInterfaceName));
}
}
}
}
return base.VisitClassDeclaration(node);
}
}
我实际得到的是:-
public class CustomerRepository : RepositoryBase, ICustomerDAL
(即 ICustomerDAL 不会重命名为 ICustomerRepository)。
我可以单步执行我的代码,我看到它到达并执行了重命名接口的代码并且没有发生错误,它只是不起作用。我怀疑这是因为它在旧节点而不是新节点上进行重命名,但我看不出我做错了什么。
有任何想法吗?
【问题讨论】: