繁体   English   中英

解析Roslyn中的参数类型

[英]Resolving parameter type in 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下模拟控制台应用程序,我们有自己的工具来创建单元测试。 但它对这种特殊情况没有任何影响。 感谢您的帮助,我真的很感激!

你需要转换ISymbolILocalSymbol ,这是公开的。
然后,您可以使用Type属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM