当前位置: 首页 > ds >正文

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

方法解释

  1. OnlyPrimitiveTypes 方法:

    • 参数: 接收一个对象 obj 进行检查。
    • 返回值: 返回布尔值,表示对象及其所有属性是否仅包含基本类型。
    • 逻辑:
      • 首先检查 obj 是否为 null,如果是,则返回 true
      • 然后检查 obj 的类型是否为基本类型,如果是,返回 true
      • 接着检查 obj 是否为集合类型,若是,则返回 false
      • 最后,遍历对象的所有公共属性,递归调用 OnlyPrimitiveTypes 方法来检查每个属性值。如果有任何属性值不符合基本类型条件,则返回 false
      • 如果所有属性都符合条件,则返回 true
  2. 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;// 如果是数组类型,检查数组中的每个元素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()){// 获取属性值并递归检查object propertyValue = property.GetValue(obj);if (!OnlyPrimitiveTypes(propertyValue)){return false; // 如果任一属性不是基本类型,则返回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.xdnf.cn/news/6442.html

相关文章:

  • 鸿蒙OSUniApp制作动态筛选功能的列表组件(鸿蒙系统适配版)#三方框架 #Uniapp
  • 青少年编程与数学 02-019 Rust 编程基础 14课题、并发编程
  • 网络安全EN18031-1,EN18031-2,EN18031-3三个标准对应的测试项目
  • google-Chrome常用插件
  • 费曼技巧实践
  • YOLO v3:目标检测领域的质变性飞跃
  • 如何快速入门-衡石科技分析平台
  • 单片机 | 基于STM32的智能马桶设计
  • 微信小程序云函数中的 limit() 和 skip(),以及实现分页请求
  • React与Docker中的MySQL进行交互
  • 如何在Google Chrome浏览器里-安装梦精灵AI提示词管理工具
  • 从单体架构到微服务:架构演进之路
  • AI、机器学习、深度学习:一文厘清三者核心区别与联系
  • CentOS7 OpenSSL升级1.1.1w
  • 华为数字政府与数字城市售前高级专家认证介绍
  • Java - Junit框架
  • 鸿蒙OSUniApp 制作自定义弹窗与模态框组件#三方框架 #Uniapp
  • 专项智能练习(加强题型)-DA-02
  • 【HarmonyOS 5】鸿蒙星闪NearLink详解
  • 【redis】redis常见数据结构及其底层,redis单线程读写效率高于多线程的理解,
  • PaddleClas 车辆属性模型vehicle_attribute_model转onnx并部署
  • 2025年5月H12-831新增题库带解析
  • mac安装cast
  • 医疗数据迁移质量与效率的深度研究:三维六阶框架与实践创新
  • 【QGIS二次开发】地图显示与交互-03
  • Windows平台OpenManus部署及WebUI远程访问实现
  • JS中的数据类型
  • 匿名函数lambda、STL与正则表达式
  • 3天北京旅游规划
  • 动态规划问题 -- 多状态模型(删除并获得点数)