判断数据的所有属性是否都是基本类型

方法解释

  1. OnlyPrimitiveTypes 方法:

    • 参数: 接收一个对象 obj 进行检查。
    • 返回值: 返回布尔值,表示对象及其所有属性是否仅包含基本类型。
    • 逻辑:
      • 首先检查 obj 是否为 null,如果是,则返回 true
      • 然后检查 obj 的类型是否为基本类型,如果是,返回 true
      • 接着检查 obj 是否为集合类型,若是,则返回 false
      • 最后,遍历对象的所有公共属性,递归调用 OnlyPrimitiveTypes 方法来检查每个属性值。如果有任何属性值不符合基本类型条件,则返回 false
      • 如果所有属性都符合条件,则返回 true

IsPrimitiveType 方法:

  • 参数: 接收一个 Type 对象。
  • 返回值: 返回布尔值,表示指定类型是否为基本类型。
  • 逻辑: 检查该类型是否是基本类型或其他指定的类型(如字符串、日期、枚举等)。
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Reflection;public static class TypeChecker
    {public static bool OnlyPrimitiveTypes(object obj){// Null值返回trueif (obj == null)return true;Type objType = obj.GetType();// 如果是基本类型,直接返回trueif (IsPrimitiveType(objType))return true;// 如果是自定义类,直接返回 falseif (objType.IsClass && innerFlag == true){return false;}// 如果是数组类型,检查数组中的每个元素if (objType.IsArray){Array array = (Array)obj;foreach (var item in array){if (!OnlyPrimitiveTypes(item)){return false; // 如果任一元素不是基本类型,则返回false}}return true; // 所有元素都是基本类型}// 如果是集合类型,直接返回falseif (typeof(IEnumerable).IsAssignableFrom(objType)){return false; // 直接返回false}// 对于任何非基本类型的自定义对象,检查其属性foreach (PropertyInfo property in objType.GetProperties()){if (!OnlyPrimitiveTypes(property.GetValue(obj), true)){return false;}}// 如果所有属性都符合条件,则返回truereturn true;}public static bool IsPrimitiveType(Type type){// 判断基本类型,包括枚举和字符串
    if (type.IsPrimitive ||type.IsEnum ||type == typeof(string) ||type == typeof(decimal) ||type == typeof(DateTime) ||type == typeof(TimeSpan) ||type == typeof(Guid) ||type == typeof(byte) ||type == typeof(sbyte) ||type == typeof(short) ||type == typeof(ushort) ||type == typeof(int) ||type == typeof(uint) ||type == typeof(long) ||type == typeof(ulong) ||type == typeof(float) ||type == typeof(double) ||type == typeof(char))
    {return true;
    }// 检查是否为可空类型
    if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
    {return IsPrimitiveType(Nullable.GetUnderlyingType(type));
    }
    return false; // 其他情况下返回 false}
    }// 示例类
    public class TaskAssignmentRecord
    {public int Id { get; set; }public string Name { get; set; }public DateTime DueDate { get; set; }public int[] Assignments { get; set; } // 这是一个数组类型
    }// 测试代码
    public class Program
    {public static void Main(){var recordWithArray = new TaskAssignmentRecord{Id = 1,Name = "Test",DueDate = DateTime.Now,Assignments = new int[] { 1, 2, 3 } // 这里是一个数组类型};bool resultWithArray = TypeChecker.OnlyPrimitiveTypes(recordWithArray);Console.WriteLine(resultWithArray); // 输出: true,因为 Assignments 是一个包含基本类型的数组var recordWithNonPrimitive = new TaskAssignmentRecord{Id = 1,Name = "Test",DueDate = DateTime.Now,Assignments = new int[] { 1, 2, 3, 4 } // 这里是一个数组类型};// 添加一个非基本类型的属性var anotherRecord = new{Id = 1,Name = "Test",DueDate = DateTime.Now,NestedObject = new { Property = "Value" } // 这个是非基本类型};bool resultWithNonPrimitive = TypeChecker.OnlyPrimitiveTypes(anotherRecord);Console.WriteLine(resultWithNonPrimitive); // 输出: false,因为 NestedObject 不是基本类型}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux安装并配置mysql

目录 1.删除原有mysql 2.添加 MySQL Yum Repository 3.安装 MySQL 3.1.报错 4.启动 MySQL 服务 5.设置mysql 5.1.密码验证组件 5.2.密码策略 5.3.移除匿名用户 5.4.是否禁用root远程访问 5.5.是否删除test 5.6.是否重新加载权限 5.7.设置远程权限 5.7.1.登录mysql…

springboot AOP 接口限流(基于IP的接口限流和黑白名单)

使用 Spring Boot 自定义注解和AOP实现基于IP的接口限流和黑白名单 在我们日常开发的项目中为了保证系统的稳定性&#xff0c;很多时候我们需要对系统做限流处理&#xff0c;它可以有效防止恶意请求对系统造成过载。常见的限流方案主要有&#xff1a; 网关限流&#xff1a; NG…

OpenCV CUDA模块中矩阵操作------范数(Norm)相关函数

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 OpenCV 的 CUDA 模块中&#xff0c;与范数&#xff08;Norm&#xff09;相关的函数主要用于计算矩阵的范数或者两个矩阵之间的差值范数。 主…

生成对抗网络(Generative Adversarial Networks ,GAN)

生成对抗网络是深度学习领域最具革命性的生成模型之一。 一 GAN框架 1.1组成 构造生成器&#xff08;G&#xff09;与判别器&#xff08;D&#xff09;进行动态对抗&#xff0c;实现数据的无监督生成。 G&#xff08;造假者&#xff09;&#xff1a;接收噪声 ​&#xff0c…

httpclient请求出现403

问题 httpclient请求对方服务器报403&#xff0c;用postman是可以的 解决方案: request.setHeader( “User-Agent” ,“Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0” ); // 设置请求头 原因&#xff1a; 因为没有设置为浏览器形式&#…

嵌入式硬件篇---IIC

文章目录 前言1. IC协议基础1.1 物理层特性两根信号线SCLSDA支持多主多从 标准模式电平 1.2 通信流程起始条件&#xff08;Start Condition&#xff09;从机地址&#xff08;Slave Address&#xff09;应答&#xff08;ACK/NACK&#xff09;数据传输&#xff1a;停止条件&#…

深入探讨 Java 注解:从基础到高级应用

Java 注解自 Java 5 引入以来,已成为现代 Java 开发中不可或缺的一部分。它们通过为代码添加元数据,简化了配置、增强了代码可读性,并支持了从编译时验证到运行时动态行为的多种功能。本文将全面探讨 Java 注解的使用、定义和处理方式,并通过一个实际的插件系统示例展示其强…

力扣-105.从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vecto…

NoSQL数据库技术与应用复习总结【看到最后】

第1章 初识NoSQL 1.1 大数据时代对数据存储的挑战 1.高并发读写需求 2.高效率存储与访问需求 3.高扩展性 1.2 认识NoSQL NoSQL--非关系型、分布式、不提供ACID的数据库设计模式 NoSQL特点 1.易扩展 2.高性能 3.灵活的数据模型 4.高可用 NoSQL拥有一个共同的特点&am…

【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件

问题场景&#xff1a; 提示&#xff1a;ipa是用于苹果设备安装的软件包资源 设备&#xff1a;iphone 13(未越狱) 安装包类型&#xff1a;ipa包 调试工具&#xff1a;hbuilderx 问题描述 提要&#xff1a;ios包无法安装 uniapp导出ios包无法安装 相信有小伙伴跟我一样&…

php数据导出pdf,然后pdf转图片,再推送钉钉群

public function takePdf($data_plan, $data_act, $file_name, $type){$pdf new \TCPDF(L); // L - 横向 P-竖向// 设置文档信息//$file_name 外协批价单;$pdf->SetCreator($file_name);$pdf->SetAuthor($file_name);$pdf->SetTitle($file_name);$pdf->SetSubjec…

每日算法-250513

每日算法 - 2024-05-13 记录今天学习的算法题解。 2335. 装满杯子需要的最短总时长 题目 思路 贪心 这道题的关键在于每次操作尽可能多地减少杯子的数量。我们每次操作可以装一杯或两杯&#xff08;不同类型&#xff09;。为了最小化总时间&#xff0c;应该优先选择装两杯不同…

城市生命线综合管控系统解决方案-守护城市生命线安全

一、政策背景 国务院办公厅《城市安全风险综合监测预警平台建设指南》‌要求&#xff1a;将燃气、供水、排水、桥梁、热力、综合管廊等纳入城市生命线监测体系&#xff0c;建立"能监测、会预警、快处置"的智慧化防控机制。住建部‌《"十四五"全国城市基础…

分布式AI推理的成功之道

随着AI模型逐渐成为企业运营的核心支柱&#xff0c;实时推理已成为推动这一转型的关键引擎。市场对即时、可决策的AI洞察需求激增&#xff0c;而AI代理——正迅速成为推理技术的前沿——即将迎来爆发式普及。德勤预测&#xff0c;到2027年&#xff0c;超半数采用生成式AI的企业…

auto.js面试题及答案

以下是常见的 Auto.js 面试题及参考答案&#xff0c;涵盖基础知识、脚本编写、运行机制、权限、安全等方面&#xff0c;适合开发岗位的技术面试准备&#xff1a; 一、基础类问题 什么是 Auto.js&#xff1f;它的主要用途是什么&#xff1f; 答案&#xff1a; Auto.js 是一个…

C语言中的指定初始化器

什么是指定初始化器? C99标准引入了一种更灵活、直观的初始化语法——指定初始化器(designated initializer), 可以在初始化列表中直接引用结构体或联合体成员名称的语法。通过这种方式,我们可以跳过某些不需要初始化的成员,并且可以以任意顺序对特定成员进行初始化。这…

高德地图在Vue3中的使用方法

1.地图初始化 容器创建&#xff1a;通过 <div> 标签定义地图挂载点。 <div id"container" style"height: 300px; width: 100%; margin-top: 10px;"></div> 密钥配置&#xff1a;绑定高德地图安全密钥&#xff0c;确保 API 合法调用。 参…

RabbitMQ发布订阅模式深度解析与实践指南

目录 RabbitMQ发布订阅模式深度解析与实践指南1. 发布订阅模式核心原理1.1 消息分发模型1.2 核心组件对比 2. 交换机类型详解2.1 交换机类型矩阵2.2 消息生命周期 3. 案例分析与实现案例1&#xff1a;基础广播消息系统案例2&#xff1a;分级日志处理系统案例3&#xff1a;分布式…

中小型培训机构都用什么教务管理系统?

在教育培训行业快速发展的今天&#xff0c;中小型培训机构面临着学员管理复杂、课程体系多样化、教学效果难以量化等挑战。一个高效的教务管理系统已成为机构运营的核心支撑。本文将深入分析当前市场上适用于中小型培训机构的教务管理系统&#xff0c;重点介绍爱耕云这一专业解…

C++虚函数食用笔记

虚函数定义与作用&#xff1a; virtual关键字声明虚函数&#xff0c;虚函数可被派生类override(保证返回类型与参数列表&#xff0c;名字均相同&#xff09;&#xff0c;从而通过基类指针调用时&#xff0c;实现多态的功能 virtual关键字: 将函数声明为虚函数 override关键…