解析 Roslyn 中的参数类型

2023-12-30

我正在使用 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(使用前将#替换为@)

解析 Roslyn 中的参数类型 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • C# 静态类型不能用作参数

    public static void SendEmail String from String To String Subject String HTML String AttachmentPath null String Attachme
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work

随机推荐

  • ASP.NET MVC:为什么我无法使用属性设置 ShowForEdit 模型元数据?

    为什么我不能设置ShowForEdit具有属性的模型元数据 似乎提供改变这一点的唯一属性是 ScaffoldColumn 这同时设置了ShowForEdit and ShowForDisplay 这不是我想做的 我希望能够在我的模型上单独注
  • 如何将 JSON 传递给 SwaggerUIBundle?

    有没有办法将 OpenAPI JSON 内容直接传递到 Swagger UISwaggerUIBundle而不是传递 URL 我需要在 React 16 应用程序中使用 Swagger UI 但是swagger ui https www n
  • Swift 中泛型类的类型别名

    我正在尝试创建泛型类型类的类型别名 如下所示 class Cars
  • 如何实现相机对焦时的视觉指示

    当用户在我的应用程序中的相机页面手动对焦 点击对焦 时 我想显示一个基本圆圈 我已经在下面实现了自动对焦 但我不确定如何在焦点上绘制圆圈并在视图变得不对焦时将其关闭 以及在相机对焦时继续重新绘制它 该指示器不应成为最终照片的一部分 仅作为相
  • 在颤振中打开文件的正确方法?

    我正在寻找一种在颤振中打开文件的方法 具体来说是PDF 我到处发现 打开文件 https pub dev packages open file但它似乎已被弃用 插件 open file 使用已弃用的 Android 嵌入版本 为了避免意外的
  • 使用类似 bash 的环境变量引用插入字符串

    我的 Golang CLI 工具有一个输入字符串 其中包含一些对 bash 语法中的环境变量的引用 VAR and VAR e g HOME somedir SOME VARIABLE dir anotherdir ANOTHER VARI
  • C# 反射 - 加载程序集并调用方法(如果存在)

    我想加载一个程序集 其名称存储在字符串中 使用反射来检查它是否有一个名为 CustomType MyMethod byte a int b 的方法 然后调用它或抛出异常 我想我应该做这样的事情 但如果有人能就如何最好地做到这一点提供相同的建
  • 设置UIView子类的背景颜色不起作用

    我正在尝试更改 UIView 子类之一的背景颜色 因为某些原因self backgroundColor UIColor whiteColor 当我把它放在我的 id initWithFrame CGRect frame视图内的方法 视野始终
  • 调试仅生产错误的过程是什么?

    首先我要说的是 我对这个话题非常无知 我什至不知道这个问题是否有客观的答案 如果最终结果是 不 我将删除或投票关闭该帖子 场景如下 我刚刚编写了一个小 Web 服务 它可以在我的机器上运行 它可以在我团队领导的机器上运行 据我所知 它可以在
  • RtsEnable 或 DtrEnable 属性是否发送信号?

    我想知道如果我将这些放入代码中 计算机是否会向设备发送任何类型的信号 SerialPort myport new SerialPort COM1 myport DtrEnable true myport RtsEnable true 我需要
  • 无法在 Mac 上使用 ARC 来使用 respondsToSelector

    当我打电话时respondsToSelector在 ARC 环境中 我收到以下错误消息Automatic Reference Counting Issue No known instance method for selector resp
  • sqlite3:在 Windows 10 上找不到命令 Python 3

    我在Windows 10上安装了Python 3 6 5 我看到 Python Python36 Lib目录中有一个sqlite3文件夹 我将Python PATH 添加到环境变量中 但是 我无法从 Powershell 或 Git Bas
  • 关于C++复制构造函数调用的问题

    我试图找出这两行代码之间的区别 我们得到的 Count 是我们的类名 C1 和 C2 是该类的对象 没有给出如何以及何时声明这些类的信息 Count C2 C1 Statement 1 Count C2 C1 Statement 2 没有提
  • PHP 从函数中获取变量

    function first foreach list as item variable item gt ID item gt title gives varible 10 some text 10 can be replaced with
  • 使用密钥大小小于 2048 的 RSA 安全密钥创建 JWT 令牌时出错

    我在尝试创建时遇到异常JWT https jwt io C Web API 应用程序中的令牌 测试环境 平台 带有 net框架的Windows 10 x64 4 6 1 jwt NuGet 包 System IdentityModel To
  • Vuejs 3 和 Bootstrap 5 模态可重用组件以编程方式显示

    尝试使用 vuejs 3 和可组合 API 创建一个基于 Bootstrap 5 的 半 可重用模态组件 设法让它部分工作 给定 主要是标准 Bootstrap 5 模式 但基于 show 属性添加类 以及正文和页脚中的插槽
  • 出于验证目的迭代方法的参数

    我一直在想 能够做这样的事情会很有用 例如 检查参数是否为空引用并最终抛出异常 这将节省一些输入 并且如果添加了新参数 就不可能忘记添加检查 好吧 除非你算一下 public void Foo string x object y Strea
  • 在运行时获取布局高度和宽度android

    如何获取在 xml 中定义为 fill parent 的高度和宽度的线性布局的宽度和高度 我尝试过 onmeasure 方法 但我不知道为什么它没有给出准确的值 在 oncreate 方法完成之前 我需要在 Activity 中使用这些值
  • 训练误差和测试误差相差多少才被认为是合适的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在研究回归问题 我使用 ad boost 和决策树进行回归 并使用 r 2 作为评估指标 我想知道训练 r 2 和测试 r 2 之间的差异有
  • 解析 Roslyn 中的参数类型

    我正在使用 Roslyn 来实现自定义业务规则 目前 我有点卡住了 我必须在调用方法时验证参数的类型 验证该方法正在被调用或包含参数时没有问题 我已经通过使用 GetSymbolInfo 来获取当前语法的符号来解析 IdentifierNa