使用 PropertyInfo 找出属性类型

2023-11-21

我想动态解析对象树以进行一些自定义验证。验证本身并不重要,但我想更好地理解 PropertyInfo 类。

我会做这样的事情:

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (the property is a string)
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }            

    return true;
}

实际上,我目前唯一关心的部分是“如果属性是字符串”。如何从 PropertyInfo 对象中找出它的类型?

我将不得不处理基本的东西,比如字符串、整数、双精度数。但我也必须处理对象,如果是这样,我将需要在这些对象内部进一步遍历对象树以验证它们内部的基本数据,它们还将有字符串等。


Use PropertyInfo.PropertyType获取属性的类型。

public bool ValidateData(object data)
{
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
    {
        if (propertyInfo.PropertyType == typeof(string))
        {
            string value = propertyInfo.GetValue(data, null);

            if value is not OK
            {
                return false;
            }
        }
    }            

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

使用 PropertyInfo 找出属性类型 的相关文章

随机推荐

  • 嵌套 if 语句和“&&”运算符

    if a b c d doSomething if a if b if c if d doSomething 这两者之间有 任何 性能差异吗 例如 当a 变为0的情况下 它会继续运行第一个if语句中的b c 和d 吗 或者它的工作方式与第二
  • c 中右值存储在哪里?

    在C中 我有这段代码 int a a 10 5 3 我想问 10 5 3 存放在哪里 据我所知 a位于堆栈上 怎么样 10 5 3 这个右值是如何计算的 通常 右值 存储 在程序本身内 换句话说 编译器本身 在程序运行之前 计算 10 5
  • 为CDK中的资源添加条件

    我创建了一个将部署在多个区域的 CDK 堆栈 其中一个构造只能部署在一个区域 在 Cloudformation 中 我只需向资源添加一个条件 但我还没有找到一种方法来对 CDK 构造执行类似的操作 可以定义一个CfnCondition并将其
  • 精确控制 GLSL 中的纹理位

    我正在尝试使用 OpenGL 和 GLSL 实现八叉树遍历方案 并且希望将数据保留在纹理中 虽然纹理数据有多种格式可供选择 不同大小的浮点数和整数 但我在弄清楚是否有一种方法可以更精确地控制位 从而实现更高的效率和紧凑的存储方面遇到了一些麻
  • 如何计算jquery中mousedown事件期间的时间?

    我试图在 mousedown up 事件上的一个按钮上执行 2 个不同的功能 但它不起作用 因为我无法检测 mousedown 事件的时间 var flag ClikerButton mousedown function e if mous
  • 获取目录中文件的数量

    如何统计目录中的文件数 我在类参考中找不到任何相关内容NSFileManager contentsOfDirectoryAtPath error 返回一个NSArray 只需发送count到数组
  • LLDB (Swift):将原始地址转换为可用类型

    是否有一个 LLDB 命令可以将原始地址转换为可用的 Swift 类 例如 lldb po 0x7df67c50 as MKPinAnnotationView 我知道这个地址指向 MKPinAnnotationView 但它不在我可以选择的
  • 为什么 pandas DataFrame 可以互相改变?

    我试图保留 pandas DataFrame 的副本 以便我可以在保存原始数据的同时对其进行修改 但是当我修改副本时 原始数据框也会发生变化 前任 df1 pd DataFrame col1 a b c d col2 1 2 3 4 df1
  • onCompleted 可以与 useMutation 一起使用吗?

    我在 React 项目中使用 useMutation 钩子 突变运行成功 但之后未达到 onCompleted 我已在突变中将notifyOnNetworkStatusChange 设置为true 但这似乎没有帮助 const create
  • OnClickListener - 事件的 x,y 位置?

    我有一个从 View 派生的自定义视图 我希望在单击视图时收到通知 以及单击发生的 x y 位置 长按也是如此 看起来像这样做 我需要覆盖onTouchEvent 有没有办法从事件的 x y 位置OnClickListener相反 但是 如
  • map_partitions的返回值是多少?

    dask API 表示 map partition 可用于 在每个 DataFrame 分区上应用 Python 函数 根据此描述并根据 map 的通常行为 我期望 map partitions 的返回值是 类似于 一个长度等于分区数量的列
  • 找出最新术语和第二个最新术语之间的差异

    表的结构就像 create table events event type integer not null value integer not null time timestamp not null unique event type
  • Flutter 无法从剪贴板读取

    我来询问一个关于 Flutter 和 Future 的非常具体的问题 并等待机制 这似乎有效 但我的剪贴板在使用可编辑文本字段操作时并没有真正起作用 即使遵循 Google 关于实现的建议 这是我的粘贴代码 onPressed async
  • 如何在 IE(9+) 和 Safari (Pad) 中播放带有 HTML5 音频的 .m4a?

    我需要在 IE 9 和 Safari iPad iPhone 中播放 m4a 文件 在 iPhone 上录制 我在设置正确的 MIME 类型时遇到问题 为了在 IE10 中播放 我需要设置audio mp4但对于 Safariaudio a
  • 什么是正则表达式平衡组?

    我刚刚读到一个关于如何在双花括号内获取数据的问题 这个问题 然后有人提出了平衡组 我仍然不太确定它们是什么以及如何使用它们 我通读了平衡组定义 但解释很难理解 而且我对我提到的问题仍然很困惑 有人可以简单解释一下平衡组是什么以及它们有什么用
  • 在 Linux 上提取 TCP 往返时间 (RTT) 估计

    我有在 Ubuntu 上运行的 apache 服务器 客户端连接并下载图像 我需要提取底层 TCP 连接的 RTT 估计 有没有办法做到这一点 也许像在调试模式下运行我的 tcp 堆栈以让它在某处记录此信息之类的东西 请注意 我不想运行 t
  • 比较对象数组,与顺序无关

    我有 2 个对象数组 我必须比较它们 但是对象的顺序DOES NOT事情 我无法对它们进行排序 因为我没有它们的键名称 因为这些函数必须是通用的 我将获得的有关该数组的唯一信息是两个数组的对象具有相同数量的键 并且这些键具有相同的名称 因此
  • 即使模型值为空,TextBoxFor Helper 也会保留以前的值

    我有一个用于添加简单实体的 MVC 表单 我正在使用 TextBoxFor model gt model FieldName 创建输入字段 我有一个 保存 按钮和一个 保存并新建 按钮 保存和新建 按钮应该回发到 保存 操作 然后返回带有空
  • 如何获取通用扩展方法的MethodInfo?

    我有一个IEnumerable
  • 使用 PropertyInfo 找出属性类型

    我想动态解析对象树以进行一些自定义验证 验证本身并不重要 但我想更好地理解 PropertyInfo 类 我会做这样的事情 public bool ValidateData object data foreach PropertyInfo