c# 递归反射和通用列表设置默认属性

2023-12-28

我正在尝试使用反射来实现以下目标:

我需要一个传入对象的方法,该方法将使用子对象递归实例化该对象,并使用默认值设置属性。我需要将整个对象实例化为所需的多个级别。

此方法需要能够处理具有多个属性的对象,这些属性将是其他对象的通用列表。

这是我的示例代码(当我得到一个包含List<AnotherSetObjects>:

private void SetPropertyValues(object obj)
{
    PropertyInfo[] properties = obj.GetType().GetProperties();

    foreach (PropertyInfo property in properties)
    {
        if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && property.PropertyType.FullName.Contains("BusinessObjects"))
        {
            Type propType = property.PropertyType;

            var subObject = Activator.CreateInstance(propType);
            SetPropertyValues(subObject);
            property.SetValue(obj, subObject, null);
        }
        else if (property.PropertyType == typeof(string))
        {
            property.SetValue(obj, property.Name, null);
        }
        else if (property.PropertyType == typeof(DateTime))
        {
            property.SetValue(obj, DateTime.Today, null);
        }
        else if (property.PropertyType == typeof(int))
        {
            property.SetValue(obj, 0, null);
        }
        else if (property.PropertyType == typeof(decimal))
        {
            property.SetValue(obj, 0, null);
        }
    }
}

Thanks


您可以通过检查来过滤掉property.PropertyType.IsGeneric对于通用容器来说也是如此。如果您需要,还请检查property.PropertyType.IsArray.

此外,您可能还想避免使用非通用容器。在这种情况下,测试对象是否属于此类容器的接口类型。例如-IList.

bool isList(object data)
{
    System.Collections.IList list = data as System.Collections.IList;
    return list != null;
}

...
if (isList(obj)) {
    //do stuff that take special care of object which is a List
    //It will be true for generic type lists too!
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# 递归反射和通用列表设置默认属性 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 私有模板函数

    我有一堂课 C h class C private template
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 如何使用Python在Telegram机器人中发送表情符号?

    我正在处理一个小项目 我决定添加表情符号以使视觉效果更好一点 但我无法发送它 我尝试过像 U000203C 这样的 Unicode 甚至尝试复制表情符号并粘贴它 但仍然无法做到 有什么办法可以发送表情符号吗 Unicode exchange
  • 如何打开 VS Code 并通过 CLI 将命令传递到集成终端

    我想知道如何使用code命令打开VS Code与综合终端 https code visualstudio com docs editor integrated terminal启动时运行一些我直接传递到集成终端的命令 现在我需要采取一些行动
  • boost::ref 没有发生匹配的调用错误,但 std::ref 则没有发生匹配的调用错误

    我编写了一些代码 它使用函子和ref and bind模板来自boost or std 对于 C 11 命名空间 我正在使用一个 define之间切换boost and std 命名空间 我使用的是 boost 版本 1 53 我的编译命令
  • Pyinstaller 可执行文件导入 torchvision 失败

    这是我的main py import torchvision input Press key 它在命令行中正确运行 python main py 我需要一个适用于 Windows 的可执行文件 所以我做了 pyinstaller main
  • 更改asp图表图例标签宽度

    Aspx
  • Fancybox2:修改对多个画廊的呼吁

    我正在生成一个 HTML 页面 其中包含来自 MySQL 数据库中保存的信息的多个画廊 我需要修改 Fancybox2 调用 如下所示 document ready function a rel gall24 a rel gall30 et
  • 显示 (head .unit ) = Agda 中的 head

    我试图证明 Agda 中的一个简单引理 我认为这是正确的 如果向量有两个以上元素 则取其head继采取init与取其相同head立即地 我将其表述如下 lem headInit l xs Vec suc suc l gt head init
  • 在 Doctrine 中,如何忽略更新架构命令中的特定列?

    我有我的映射实体 named Product 只有两列 id and name 如果我手动添加另一列 即stock qty直接使用SQL语句 架构更新工具将远程它 当然 如何防止 Doctrine 删除我的自定义列 而不是映射到我的实体 相
  • 如何在 HTTP 查询字符串中发送 NULL?

    我正在开发一个 API 它可以接受主要三种数据类型作为查询字符串参数的值 boolean string numeric integer or float 默认情况下 所有内容都以字符串检索 我认为没有办法解决这个问题 但参数配置了类型 以便
  • 拥有大量小方法是否有助于 JIT 编译器优化?

    在最近关于如何优化某些代码的讨论中 我被告知将代码分解为许多小方法可以显着提高性能 因为 JIT 编译器不喜欢优化大型方法 我对此不确定 因为似乎 JIT 编译器本身应该能够识别独立的代码段 无论它们是否在自己的方法中 谁能证实或反驳这一说
  • 检查 NSDictionary 中是否存在键

    我如何检查它是否存在 dataArray objectAtIndex indexPathSet row valueForKey SetEntries 我想知道这个密钥是否存在 我怎样才能做到这一点 非常感谢 编辑 dataArray 中有对
  • 如何使 ttk.Scale 表现得更像 tk.Scale?

    Ttk 版本中还存在一些 Tk 小部件 通常它们具有相同的一般行为 但使用 样式 和 主题 而不是每个实例的外观属性 例如bg ETC 这很好 因为 Ttk 小部件默认采用操作系统窗口管理器的 标准外观 无需配置任何有关外观的内容 然而 由
  • 完美的makefile

    我想用make http en wikipedia org wiki Make 28software 29结合获得模块化构建持续集成 http en wikipedia org wiki Continuous integration 自动单
  • 为什么不需要资格?

    好的 我将发布完整的程序 即使它有无关的内容并且有问题的代码是死代码 include
  • 如何在 .NET 中查找串行端口设备及其驱动程序名称?

    我有一个通过串口连接到计算机的设备 我知道在 NET中打开端口我可以通过COM号调用该端口 例如 SerialPort s new SerialPort COM9 s Open 调用 COM9 上的设备 但是 如果我在另一台计算机上运行我的
  • SQL Server 中的 mysql 'SHOW PROCESSLIST' 相当于什么?

    我们正在转换为SQL Server from MySQL 我试图弄清楚为什么要打电话给sqsh没有回来 我怀疑有一些我不知道的锁 您如何了解正在发生的情况 最好通过数据库连接 您可以查看 sp who 和 sp who2 以查看它们是否为您
  • SBT 中的子项目依赖关系

    我在 SBT 子项目上遇到了一个奇怪的问题 我认为这与依赖关系有关 这是我的设置 我有一个 SBT 项目 有两个子项目 A 和 B A 包含一个类和伴生对象MyA B 取决于 A B 包含一个对象MyB其中有一个主要方法 当我尝试执行时My
  • 尝试构建一个简单的 C# 应用程序来控制我的音量混合器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想做的就是构建一个简单的应用程序来控制我的音量混合器 我更喜欢使用 c 但我的印象是它是一种太高级的语言 无法做这样的事情 我正在寻
  • 尝试 WSO2 IoT 3.3.0 android 注册时如何修复错误“注册失败”?

    我在虚拟机中设置了一个新的服务器 Windows 2012R2 下载最新的active mq和Apache ant 使用Oracle JDK 8u192 安装和设置 WSO2 IoT 应用程序后 我无法注册 Android 设备 我按照 3
  • c# 递归反射和通用列表设置默认属性

    我正在尝试使用反射来实现以下目标 我需要一个传入对象的方法 该方法将使用子对象递归实例化该对象 并使用默认值设置属性 我需要将整个对象实例化为所需的多个级别 此方法需要能够处理具有多个属性的对象 这些属性将是其他对象的通用列表 这是我的示例