作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个生成接口(interface)实现的简单 Roslyn 生成器,因此我想从 TypeDeclarationSyntax
获取 TypeSyntax
,因为以下代码:
// Our generator is applied to any class that our attribute is applied to.
var applyToInterface = (InterfaceDeclarationSyntax)applyTo;
// Trying to implement this interface
var clientClass = SyntaxFactory.ClassDeclaration(SyntaxFactory.Identifier(applyToInterface.Identifier.ValueText + "Client"))
.WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.WithBaseList(SyntaxFactory.SimpleBaseType(applyToInterface.???));
但是,除了 SyntaxFactory.ParseTypeName
之外,我看不到任何创建 TypeSyntax 的方法。但是我不想获取接口(interface)名称然后将其转换回类型,因为可能存在错误(例如 +
泛型中的字符而不是点等等)。
执行此操作最方便和推荐的方法是什么?目前我正在使用
var clientClass = SyntaxFactory.ClassDeclaration(SyntaxFactory.Identifier(applyToInterface.Identifier.ValueText + "Client"))
.WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName(applyToInterface.Identifier.ValueText)));
但我不确定它是否总是正确的。
最佳答案
我相信你的做法是正确的,由于 Roslyn 缺乏文档,我通常会检查他们的来源以使用内部示例来检查我的示例。我通过搜索 WithBaseList 找到了这个示例
var implementedInterfaceTypeSyntax = extractedInterfaceSymbol.TypeParameters.Any()
? SyntaxFactory.GenericName(
SyntaxFactory.Identifier(extractedInterfaceSymbol.Name),
SyntaxFactory.TypeArgumentList(SyntaxFactory.SeparatedList(extractedInterfaceSymbol.TypeParameters.Select(p => SyntaxFactory.ParseTypeName(p.Name)))))
: SyntaxFactory.ParseTypeName(extractedInterfaceSymbol.Name);
var baseList = typeDeclaration.BaseList ?? SyntaxFactory.BaseList();
var updatedBaseList = baseList.WithTypes(SyntaxFactory.SeparatedList(baseList.Types.Union(new[] { SyntaxFactory.SimpleBaseType(implementedInterfaceTypeSyntax) })));
在这种情况下,他们使用符号来生成类型。
关于c# - 如何从 TypeDeclarationSyntax 获取 TypeSyntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44647870/
我正在编写一个生成接口(interface)实现的简单 Roslyn 生成器,因此我想从 TypeDeclarationSyntax 获取 TypeSyntax,因为以下代码: // Our gene
我正在尝试做的事情: 我正在使用 roslyn 编写代码重构。我的目标是创造一个类(class)。所以我所做的基本上是删除所有私有(private)员工,并用 throw new NotImpleme
我是一名优秀的程序员,十分优秀!