解析Roslyn中的参数类型
作者:互联网
我正在使用Roslyn实施自定义业务规则.目前,我有点卡住,在调用方法时必须验证参数的类型.验证该方法正在被调用或包含参数没有问题.
我已经通过使用GetSymbolInfo来获取我当前语法的符号来解析IdentifierNameSyntax.它不是null,并且具有我正在寻找的信息,例如:
CandidateReason: None
CandidateSymbols: Length = 0
Symbol: Local System.Threading.Tasks.TaskScheduler ui
当我进入Symbol属性时,我想验证ui变量确实是TaskScheduler,但是几天来它一直是不成功的操作.基本上,这是当我进入Symbol时获得的信息
Local System.Threading.Tasks.TaskScheduler ui
CanBeReferencedByName: true
ConstantValue: null
ContainingAssembly: Assembly TestProject, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
ContainingNamespace: Namespace ConsoleApplication1
ContainingSymbol: Method void ConsoleApplication1.TypeName.Test()
ContainingType: NamedType ConsoleApplication1.TypeName
DeclaredAccessibility: NotApplicable
DeclaringSyntaxReferences: Length = 1
HasConstantValue: false
HasUnsupportedMetadata: false
HighestPriorityUseSiteError: 2147483647
IsAbstract: false
IsCatch: false
IsConst: false
IsDefinition: true
IsExtern: false
IsFixed: false
IsFor: false
IsForEach: false
IsImplicitlyDeclared: false
IsOverride: false
IsSealed: false
IsStatic: false
IsUsing: false
IsVar: true
IsVirtual: false
Kind: Local
Language: "C#"
Locations: Length = 1
MetadataName: "ui"
Name: "ui"
OriginalDefinition: Local System.Threading.Tasks.TaskScheduler ui
OriginalSymbolDefinition: Local System.Threading.Tasks.TaskScheduler ui
Type: NamedType System.Threading.Tasks.TaskScheduler
binder: {Microsoft.CodeAnalysis.CSharp.BlockBinder}
到目前为止,这是我得到的ui类型:
>在OriginalDefinition上的ToString()
> OrigninalDefinition上的ToDisplayString()
>符号上的ToString()
>试图达到类型,但我只能在运行时看到它.
如果需要,我可以提供示例代码,但不能共享我所做的代码.
对于那些可能会想知道的控制台应用程序正在TDD下进行仿真的人,我们拥有自己的工具来创建单元测试.但这对这种特殊情况没有任何影响.
感谢您的帮助,我非常感谢!
解决方法:
您需要将ISymbol强制转换为公开的ILocalSymbol
.
然后,您可以使用Type属性.
标签:roslyn,code-analysis,c 来源: https://codeday.me/bug/20191120/2045277.html