判斷數據的所有屬性是否都是基本類型

方法解釋

  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.pswp.cn/bicheng/81202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81202.shtml
英文地址,請注明出處:http://en.pswp.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關鍵…