ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解析Roslyn中的参数类型

2019-11-20 16:05:45  阅读:319  来源: 互联网

标签:roslyn code-analysis c


我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有