我正在使用 Roslyn 来实现自定义业务规则。目前,我有点卡住了,我必须在调用方法时验证参数的类型。验证该方法正在被调用或包含参数时没有问题。
我已经通过使用 GetSymbolInfo 来获取当前语法的符号来解析 IdentifierNameSyntax。它不为空,并且包含我正在寻找的信息,如下所示:
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
to ILocalSymbol http://source.roslyn.io/#Microsoft.CodeAnalysis/Symbols/ILocalSymbol.cs,这是公开的。
然后您可以使用Type
财产。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)