在 C# 中记录对象的所有属性。如何记录内部对象属性?

2024-02-26

我试图(1)记录对象的所有属性,以及(2)其中特定对象类型的所有属性。我可以做(1)但不能做(2)。

现在就是这种情况。

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(object1))
{
     string name = descriptor.Name;
     object value = descriptor.GetValue(object1);
     logger.Debug(String.Format("{0} = {1}", name, value));
}

我需要的是这样的:

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(object1))
{
     string name = descriptor.Name;
     object value = descriptor.GetValue(object1);
     logger.Debug(String.Format("{0} = {1}", name, value));

     // TODO check if the current property of object1 is of type object2, how?
     if (...) {
     // TODO repeat the process for object2

     foreach (PropertyDescriptor innerdescriptor in TypeDescriptor.GetProperties(object2))
     {
          string innername = innerdescriptor.Name;
          object innervalue = innerdescriptor.GetValue(object2);
          logger.Debug(String.Format("     {0} = {1}", innername, innervalue));
     }

     } // end if
}

然而,无论我如何尝试,第二件事都不起作用。所以,请帮忙。

update我有支票的答案(@Alex Art.)

if (descriptor.PropertyType == typeof(the type that you expecting) )  { ... }

现在唯一剩下的就是内部对象属性记录器!


我认为可以通过使用反射来实现(但你应该意识到性能损失):

public void LogProps(Object object1)
{
   var objType = object1.GetType();

   IList<PropertyInfo> properties = new List<PropertyInfo>(objType.GetProperties());

   foreach (PropertyInfo prop in properties)
   {
       var propValue = prop.GetValue(object1, null);
       if(prop.PropertyType == typeof(yourTypeHere))
       {  
          LogProps(propValue);
       }
       else
       {           
           logger.Debug(String.Format("{0} = {1}", prop.Name, propValue));
       }
   }
}

我还在这里使用了递归,如果您有一些很长的层次结构,这也可能会出现问题

关于您的解决方案:

// TODO 检查 object1 的当前属性是否属于 object2 类型, 如何?

你尝试过使用PropertyDescriptor.PropertyType http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.propertytype(v=vs.110).aspx?:

 object value = descriptor.GetValue(object1);

 if (descriptor.PropertyType == typeof(the type that you expecting) ) 
 {

    foreach (PropertyDescriptor innerdescriptor in TypeDescriptor.GetProperties(value) 
    {
         string innername = innerdescriptor.Name;
         object innervalue = innerdescriptor.GetValue(object2);
         logger.Debug(String.Format("     {0} = {1}", innername, innervalue));
    }

 } // end if
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中记录对象的所有属性。如何记录内部对象属性? 的相关文章

  • 集群():是否可以仅检查文件是否已锁定,而不实际获取锁定(如果没有)?

    我的用例如下 我有一个程序 它强制在任何给定时间只能运行它的一个实例 因此在启动时它总是尝试在标准位置获取锁定文件 并在该文件终止时终止已经被锁定 这一切都工作正常 但现在我想用一个新的命令行选项来增强程序 当指定该选项时 将导致程序只打印
  • C++ STL 映射,std::pair 作为键

    这就是我通过地图定义的方式 std map
  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • MVVM:来自 FileOpenPicker 的图像绑定源

    我将 OnActivated 添加到 app xaml cs 中 它可以正常工作 protected async override void OnActivated IActivatedEventArgs args var continua
  • 如何在建立上下文时设置连接超时-PrincipalContext

    using PrincipalContext ctx new PrincipalContext ContextType Domain Domain UserName Password UserPrincipal U new UserPrin
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • C++:避免​​在重载中将字符串自动转换为布尔值

    我想创建一组方法 这些方法将根据其类型输出具有特殊格式的值 当我这样做时 到目前为止看起来还不错 static void printValue std ostringstream out int value out lt lt value
  • .Net 支持柯里化泛型吗?

    假设我们有一个嵌套的泛型类 public class A
  • 绑定集合的子集

    我有一个ObservableCollection
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 如何在我的小程序中使用 JXMapViewer?

    我想编写一个必须使用缩放 平移工具渲染地图图像的小程序 我发现 JXMapViewer 可以帮助我 我该如何使用它 我在哪里可以找到相关文档 帮助我编写一个小程序 请求我的图像服务器提供要渲染的图块 图像服务器怎么样 帮助我 JXMapVi
  • Android 模拟器错误:std::bad_alloc

    我正在使用 Eclipse Juno 和 Android 模拟器 SDK Tools 21 1 并且多次遇到此错误 嗯 6 小时内出现两到三次 2013 03 22 11 41 19 Emulator terminate called af
  • Apache proxypass 缓存的 IP 地址

    我使用 Apache Web 服务器 2 4 通过 proxypass 指令将传入的 HTTP 请求代理到我们的后端服务器 我还通过 Apache 传递来自后端服务器的传出请求 再次使用 proxypass 例如 lt Location o
  • 在 NiFi 处理器“InvokeHTTP”中,您在哪里编写 POST 请求的正文?

    在发布有关 Apache NiFi InvokeHTTP 的问题之前 我已经浏览了所有其他问题及其答案 但我仍然不确定我应该拥有的最佳流程 我的情况如下 1 从 Apache Kafka 我获取原始元数据 2 使用EvaluateJSONP
  • 使用 React-Native 监听 Android 上的传入链接

    我可以使用链接库通过react native监听和处理IOS上的传入链接 https facebook github io react native docs linking html https facebook github io re
  • 如何在java中验证unix时间戳?

    我需要验证给定的输入字符串是否有效Timestamp以毫秒为单位 例如 如果给定Timestamp String time 1310966356458 那么它应该返回true if String time 1000 那么它应该返回 fals
  • 我可以通过在 Airflow 中向运算符添加更多 cpu 来提高处理速度吗?

    In airflow cfg有一个部分称为 operators where default cpus被设置为1 and default ram and default disk都设置为512 我想了解如果增加这些参数是否会提高处理速度 我查
  • 基于 JWT 的 标签身份验证?

    假设我有一个单页面应用程序 它使用 JWT 令牌对后端 REST api 进行身份验证 我在执行 REST 请求时在 http 标头内传输 JWT 令牌 到目前为止 一切都很好 现在 假设我想从服务器下载图像 并且我希望该图像只能由经过身份
  • 替换文件路径中的分隔符

    我正在 VS 2008 中开发一个 C Web 应用程序 我让用户选择一个输入文件 然后将文件路径存储在一个字符串变量中 但是 它将这条路径存储为 C folder 所以我的问题是如何将此文件路径转换为单个 谢谢大家的帮助 请原谅我 因为我
  • 反转列表时出现意外结果

    我需要对下面代码的意外结果进行一些解释 似乎是由于一些错误 reverse b gt b reverse reverse x x reverse x xs last x xs reverse xs Main gt reverse 0 8 2
  • 无法将类型 string 隐式转换为 System.date.time 但在 datetime 中声明

    我是 C 的初学者 编写了一些代码 但出现错误 错误是 无法将字符串类型隐式转换为 System date time 但我在这里看到我在字符串中声明 public partial class HDate private string Sta
  • 为什么当我 pip freeze 时没有出现 setuptools 1.3.1?

    我在跑步virtualenvwrapper和 Ubuntu 12 04 上的朋友 virtualenvwrapper 1 7 1 2 virtualenv 1 7 1 2 pip 1 0 Distribute 0 6 24 Python 2
  • 从 perf 获取用户空间堆栈信息

    我目前正在尝试在我正在测试的 PostgreSQL 版本中追踪一些幻像 I O 它是一个多进程服务器 将磁盘 I O 关联回特定后端和查询并不简单 我还以为Linux的perf工具将是理想的选择 但我正在努力捕获块 I O 性能计数器指标并
  • SQL中如何知道记录的插入日期

    我在用phpMyAdmin对于我的项目 我有一张没有的桌子date datetime field 我想知道是否有办法知道我何时在数据库中插入每条记录 在设计数据库时 如果您忘记保留一个额外的字段来存储一行的插入时间 那么您只剩下一个选项来了
  • “激活”的 RESTful URL

    我有一个资源 project 可以激活和停用 用于此目的的最 RESTful URL 端点是什么 现在我在想 projects id activate and projects id deactivate 但我不认为这很RESTful 另外
  • 为什么要检查 cls 是否是 __subclasshook__ 中的类?

    In the Python 标准库文档 https docs python org 3 library abc html abc ABCMeta subclasshook 示例实现 subclasshook is class MyItera
  • 替代数字之和 (XML/XSL)

    需要在使用 XSLT 从 XML 文件接收的数字中添加备用数字 例如 如果我收到 123456789 我需要使用 XSLT 函数从最右边计算备用数字总和 我对此有什么建议吗 谢谢 拉克斯米坎特 使用 XSLT 2 0 可以非常轻松地做到这一
  • 使用 dplyr 总结逻辑数据帧

    我正在尝试使用两个变量来总结数据框 我基本上想通过变量 2 分解变量 1 以便在 100 堆积条形图中绘制结果 我有多个逻辑类型的列 它们可以分为两个主要类别 用于创建细分 我尝试过使用gather from dplyr将数据帧转换为长格式
  • Unity 5.4.2f-GVR13 中的 Daydream 非 VR 模式 [重复]

    这个问题在这里已经有答案了 上周我尝试将我的 Unity 项目集成到 Daydream 集成进展顺利 现在我试图将第一个场景 包括登录过程 所以我需要 android 软键盘 与应用程序的其余部分分开 我希望应用程序像任何 android
  • 在 C# 中记录对象的所有属性。如何记录内部对象属性?

    我试图 1 记录对象的所有属性 以及 2 其中特定对象类型的所有属性 我可以做 1 但不能做 2 现在就是这种情况 foreach PropertyDescriptor descriptor in TypeDescriptor GetPro