反射 - 在我自己的程序集中递归迭代对象的属性 (Vb.Net/3.5)

2024-02-12

我想知道是否有人可以帮助我 - 我没有做太多反思,但了解基本原理。

我正在尝试做的事情:

我正在开发一个类,该类收集大量有关本地系统、网络等的信息,用于自动错误报告。我(理想情况下)希望能够将批次序列化为 XML 字符串并仅将其显示在文本框中,而不是每次添加新属性时都必须更改测试工具。

不幸的是,框架不会对只读属性(几乎所有我的属性)使用默认的 XML 序列化器,因为它们无法正确反序列化

[不确定我是否同意任何序列化的东西都必须反序列化的假设 - MS 说这是一个“设计”的功能,我想我可以理解 - 也许一个标签表明它应该被序列化会是有利的?]

最初的方法是使属性可获取和可设置(在设置器上抛出异常),但之后整理的工作量似乎有点过多,我希望这些属性在最终版本中是只读的。

我需要什么帮助:

我当前的计划是使用反射来递归地迭代我最顶层的聚集类的每个(公共)属性。问题是,我见过的示例不会递归处理事情。此外,我只想检查对象的属性(如果它位于我的程序集中之一) - 否则只需对其调用 .ToString 即可。

如果我没有将检查限制在我的程序集中,我假设我会得到(比如说)一个字符串,其中包含一个 Length,而该 Length 又将具有 .Tostring 方法...

为了这个项目的目的,我可以almost保证我的代码中没有循环引用,因为这只会用作开发工具,所以我不会too担心它时不时地胡作非为。

我很感激一些例子/建议。

提前谢谢了。


希望这能让您开始。它将树直接打印到控制台,因此您需要进行调整以输出 XML。然后更改 IsMyOwnType 方法以过滤掉您感兴趣的程序集,现在它只关心与自身相同的程序集中的类型。

Shared Sub RecurseProperties(o As Object, level As Integer)
    For Each pi As PropertyInfo In o.GetType().GetProperties()
        If pi.GetIndexParameters().Length > 0 Then Continue For

        Console.Write(New String(" "c, 2 * level))
        Console.Write(pi.Name)
        Console.Write(" = ")

        Dim propValue As Object = pi.GetValue(o, Nothing)
        If propValue Is Nothing Then
            Console.WriteLine("<null>")
        Else
            If IsMyOwnType(pi.PropertyType) Then
                Console.WriteLine("<object>")
                RecurseProperties(propValue, level+1)
            Else
                Console.WriteLine(propValue.ToString())
            End If
        End If

    Next
End Sub

Shared Function IsMyOwnType(t As Type) As Boolean
    Return t.Assembly Is Assembly.GetExecutingAssembly()
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反射 - 在我自己的程序集中递归迭代对象的属性 (Vb.Net/3.5) 的相关文章

  • 从文件夹中选择随机图像以显示在 picturebox、vb.net 中

    我有一个图片框 它从文件夹中读取图像进行显示 而不是通常的无聊图像 我认为在文件夹中包含许多图像并让我的 vb net 程序随机挑选一个来显示可能会更好使用 我怎样才能做到这一点 尝试这个 Public Function GetRandom
  • 为什么必须使用“out”而不是ref?

    我写了一些关于 ref out 声明的代码块 我认为 ref 最有用 好的 为什么我需要用完 我每次都可以使用always ref namespace out ref class Program static void Main strin
  • 如何从命令行构建 .csproj 将日志写入指定位置?

    虽然 无日志 构建似乎可以顺利地与类似的东西一起工作 c Program Files Microsoft Visual Studio 9 0 Common7 ide VCSExpress Project1 csproj build 以下失败
  • 写入 SQL 时遇到问题

    我已经用 VB Net 编写了几个月了 并且在我的代码中成功地使用了 SQL 命令很多次 但是在写入数据库中的一个特定表时遇到了问题 我相信问题在于我有一个正在尝试写入的数字列 我得出这个结论是因为它是我不经常使用的唯一一个 并且我的代码不
  • 使用反射来检查部分方法是否已实现

    背景 我正在使用 Linq to SQL 因此生成了一个包含自动生成的类的 DBML 文件 部分生成过程为某些操作创建部分方法 在我的例子中 我感兴趣的两个方法与表记录的插入和更新相关 这些部分方法是根据 DBML 设计器中创建的每个表生成
  • VB.NET DatetimePicker - 错误的周数

    我的 vb net 扩展日期时间选择器有问题 当元素传递到新年 2016 时 左侧显示的周数是错误的 我有一个 datetimepicker 它不是默认组件 它是在此处下载的 http www codeproject com Article
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • 改进绩效反思 - 我应该考虑哪些替代方案?

    我需要动态地设置对象上的一堆或属性的值 将其称为传输对象 将在短时间内创建相当数量的此类传输对象并设置其属性 我想避免使用反射 还有其他选择吗 如果是的话 有我可以查看的示例实现吗 Use Delegate CreateDelegate h
  • 有什么方法可以从命令行进行 Visual Studio“仅项目”构建吗?

    devenv mysolution sln build Release Win32 project myproject 从命令行构建时 我似乎可以选择执行 build or rebuild 但不能说我只想做 仅项目 即不构建或重建指定项目的
  • 将本地 HTML 文件/代码导入 Web 浏览器

    我正在尝试让本地 HTML 文件显示在WebBrowser在 VB NET 程序中 我正在使用下面的代码 但它似乎不起作用 我不明白为什么 first method WebBrowser1 Navigate index html secon
  • 为什么我不能将表达式主体转换为 MethodCallExpression

    给定以下课程 public class MyClass private readonly UrlHelper urlHelper constructor left out for brevity this is one of many ov
  • 编辑并继续:“当......时不允许更改”

    即使我创建了一个干净的 WinForms 项目 编辑并继续 也不起作用并给出错误 当调试器已附加到已运行的进程或正在调试的代码在构建或运行时进行了优化时 不允许进行更改 在 工具 选项 调试 中选中 编辑并继续 选项 未启用优化 似乎没有设
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 如何在 vb.net 中使用 Stacktrace 返回错误行号

    我正在尝试创建某种错误捕获方法来返回错误行号 当进程中止时 我们会发送一封中止电子邮件 该电子邮件为我们提供了错误号 and 错误描述但我想知道实际上哪里出了错误 我知道你可以执行以下操作 1 code here 2 code here 3
  • Datagridview 单元格焦点

    我有一个从数据库加载数据的数据网格视图 这是未绑定的 datagridview 这些列是描述 价格 数量和总计 说明 U价格来自数据库 然后输入数量 我希望这样当我的数据网格加载时 光标会转到 数量 列 并且它会像我们在文本框中那样闪烁显示
  • 在生产服务器上安装 VS.NET 是否安全且可以接受? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通常 我们在生产服务器上安装 VS NET 以便在必要时轻松解决我们产品的问题 这是好主意还是坏主意 调试和开发应该在 安全 环境中完成 这不是
  • 使用 VB.NET 检查 Word 文档中的字体样式

    我想使用vb net检查一个word文件 并检查文档中的样式是否正确 我必须在word文档中检查这些表达式 a Verdana 16 pt Bold Red b Verdana 12 pt Bold Italic Blue c Verdan
  • 错误:查询值的数量和目标字段的数量不相同

    Public Class RoomInfo Dim ValTx As String Dim ValNr As Integer Private Sub cboRoomType DropDown sender As System Object
  • 某些笔记本电脑中的 VB.net Forms UI 显示问题

    我是 VB 应用程序的新手 无法弄清楚我的应用程序出了什么问题 有一个带有几个标签和文本字段的表单 当我在我和其他人的机器上运行该应用程序时 它显示良好 并具有正确的对齐和字体 然而 对于某些人来说 应用程序表单 UI 是破碎的 未对齐的文
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO

随机推荐

  • MySql 查询:包含 COUNT(id) == 0 的天数,但仅在过去 30 天内

    我正在执行一个查询 以获取过去 30 天内每天从数据库中生成的数量 但也需要标记没有构建的日子 在我的 WHERE 子句中 我使用 Submittime 来确定是否有构建 如何修改它以包含 COUNT id 0 但仅在过去 30 天内的日期
  • CORS 不适用于 Chrome

    我已经在服务器上设置了跨源资源共享 使用 CrossOriginFilter 的 Jetty 它在 IE8 和 Firefox 上完美运行 在 Chrome 上 它只是 没有 ajax url crossOriginURL type GET
  • Pandas 计算机每小时平均值并设置在间隔中间

    我想计算风速和风向时间序列的每小时平均值 但我想将时间设置为半小时 因此 14 00 到 15 00 之间的值的平均值将为 14 30 现在 我似乎只能在间隔的左侧或右侧得到它 这是我目前拥有的 ts g item replace seco
  • 无法下载eclipse插件

    我正在尝试下载 eclipse 的 kotlin 插件 我能够连接到 eclipse 市场 但是当我尝试下载它时 出现错误 Unable to read repository at https dl bintray com jetbrain
  • 对 Pandas 数据框中的行对应用函数

    我是 pandas dataframe 的新手 我想应用一个在同一列中获取几行的函数 就像当您应用函数 diff 时一样 但我想计算文本之间的距离 所以我定义了一个测量距离的函数 我尝试使用 apply 但我不知道如何选择几行 下面我展示了
  • 石墨总结数据点

    我在用着graphite http graphite wikidot com 收集数据 我想检索一段时间内某些事件的总数 比如说 每周的登录次数 但是 我只需要总数 不需要查看它如何随时间变化 当我使用类似的东西时from 1w targe
  • Symfony 5 Api 测试 createClient() LogicalException

    正如标题所示 我正在使用 Symfony 5 构建一个 API 我有一些控制器需要不同的用户权限 我想测试它们 所以我决定创建两个具有不同角色的用户用于测试目的 ROLE USER and ROLE ADMIN 当前的代码是这样的 注意 这
  • MySql:显示列但排除除字段名称之外的所有内容

    我想将表的字段名称从 MySql 提取到 python 中 我知道 show columns from project 将工作 我读到您可以添加 WHERE 以将其限制为某些字段 但我找不到如何仅返回列名而不返回类型 键 空 额外信息的示例
  • Rails.cache.clear 和 rake tmp:cache:clear 有什么区别?

    这两个命令等效吗 如果不是 有什么区别 rake 任务仅清除存储在文件系统中的文件 Rails root tmp cache 这是该任务的代码 namespace cache do desc Clears all files and dir
  • 需要了解SemaphoreSlim的用法

    这是我的代码 但我不明白是什么SemaphoreSlim是在做 async Task WorkerMainAsync SemaphoreSlim ss new SemaphoreSlim 10 List
  • ASP.NET / IIS 远程调试 - DEBUG 动词

    我正在寻找有关 DEBUG HTTP 动词的详细信息 我很清楚这是用于远程调试 尽管我什至不确定它是用于 IIS 还是 ASP NET 如果我想直接访问此界面 即不通过 Visual Studio 而是手动发送这些命令 我需要知道什么 它的
  • 我需要为初级程序员进行一些简单的逻辑/编程练习[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在教授员工 ECMA 脚本 因为维护我们使用的工作流程系统需要它 并且我需要一些挑战来用作练习 我们已经涵盖了大部分语言 他现在非
  • 为遗留库创建代码契约

    最终目标是为驻留在我无法控制的外部程序集中的类指定契约 即我不能直接向该类添加契约 到目前为止我已经尝试过 ContractClassFor属性 不起作用 因为目标类必须指向合约类 通过对自动生成的程序集进行逆向工程 手动构建合同引用程序集
  • Bingpreview 使电子邮件中的一次性链接失效

    Outlook com 似乎使用必应预览 https www bing com webmaster help which crawlers does bing use 8c184ec0爬虫来爬行电子邮件中的链接 但在打开电子邮件后 用户有机
  • GCC 选项强制执行 Ansi C 标准检查?

    我应该使用哪些 gcc 选项来强制执行 ANSI C C99 警告 错误 gcc GCC 3 4 2 mingw 特殊 我在用着 gcc 学究式 ansi std c99 它是否正确 The ansi标志是同义词 std c89 flag
  • CakePHP 2.1.0:如何创建“停机维护”页面

    我正在尝试实现类似的东西马克 斯托里的 停机维护 页面 http mark story com posts view quick and dirty down for maintenance page with cakephp使用 Cake
  • 代码中未初始化的指针

    我正在学习 C 我发现指针如果未初始化可能会指向内存中的随机位置 并产生内存可能被其他程序使用的问题 现在 如果是这种情况 我们就不应该在代码的任何部分包含这一行 int ptr 相反 我们应该有类似的东西 int ptr NULL Is
  • Spring 批处理:FlatFileItemWriter 标头从未被调用

    我的 FlatFileItemWriter 回调有一个奇怪的问题 我有一个自定义 ItemWriter 实现 FlatFileFooterCallback 和 FlatFileHeaderCallback 因此 我在 FlatFileIte
  • 将 Android Google Maps v2 与自定义 View 或 ImageView 结合使用

    基本上我希望能够使用 Google 地图 v2 在地图上绘制雷达图像 并使用良好的 性能并且位图图像没有闪烁或延迟 我目前正在使用 Maps v1 来执行此操作 效果很好 但是 Maps v2 不太适合这样做 您可能认为 GroundOve
  • 反射 - 在我自己的程序集中递归迭代对象的属性 (Vb.Net/3.5)

    我想知道是否有人可以帮助我 我没有做太多反思 但了解基本原理 我正在尝试做的事情 我正在开发一个类 该类收集大量有关本地系统 网络等的信息 用于自动错误报告 我 理想情况下 希望能够将批次序列化为 XML 字符串并仅将其显示在文本框中 而不