【.net core】支持通過屬性名稱索引的泛型包裝類

/// <summary>
/// 支持通過屬性名稱索引的泛型包裝類
/// </summary>
public class PropertyIndexer<T> : IEnumerable<T>
{private T[] _items;private T _instance;private PropertyInfo[] _properties;private bool _caseSensitive;public PropertyIndexer(T item, bool caseSensitive = true){_instance = item;_caseSensitive = caseSensitive;_properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);}// 通過屬性名稱獲取值public object this[string propertyName]{get{PropertyInfo property = FindProperty(propertyName);if (property == null)throw new ArgumentException($"找不到屬性: {propertyName}");return property.GetValue(_instance);}set{PropertyInfo property = FindProperty(propertyName);if (property == null)throw new ArgumentException($"找不到屬性: {propertyName}");// 類型轉換object convertedValue = Convert.ChangeType(value, property.PropertyType);property.SetValue(_instance, convertedValue);}}// 查找屬性(支持大小寫敏感/不敏感)private PropertyInfo FindProperty(string propertyName){if (_caseSensitive){return Array.Find(_properties, p => p.Name == propertyName);}else{return Array.Find(_properties, p => p.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase));}}// 獲取底層實例public T Instance => _instance;// 實現IEnumerable<T>接口public IEnumerator<T> GetEnumerator(){foreach (T item in _items){yield return item;}}// 顯式實現非泛型接口IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}
}

實體類轉換方法

//將實體類集合轉換為支持屬性名稱索引的類
public static List<PropertyIndexer<T>> ConvertToPropertyIndexer<T>(List<T> dataList) {List<PropertyIndexer<T>> result = new List<PropertyIndexer<T>>();foreach (T item in dataList) {result.Add(new PropertyIndexer<T>(item));}return result;
}
//索引類轉換為實體類
public static List<T> ConvertToPropertyIndexer<T>(List<PropertyIndexer<T>> dataList)
{List<T> result = new List<T>();foreach (PropertyIndexer<T> item in dataList){result.Add(item.Instance);}return result;
}

調用

public ClassA{public string name {get;set;}public string value {get;set;}
}List<ClassA> list = new List<ClassA>(){new ClassA(){name = "a",value="1"  },new ClassA(){name = "b",value="2"  },
}List<PropertyIndexer<ClassA>> values =DataCountCenterService.ConvertToPropertyIndexer<ClassA>(list);Console.WriteLine(values[0]["name"].ToString());//索引取字段值的返回結果是object,需要進行轉換,此處輸出結果為a

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89808.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習|學習筆記】詳解支持向量機(Support Vector Machine,SVM)為何要引入核函數?為何對缺失數據敏感?

【機器學習|學習筆記】詳解支持向量機(Support Vector Machine,SVM)為何要引入核函數?為何對缺失數據敏感? 【機器學習|學習筆記】詳解支持向量機(Support Vector Machine,SVM)為何要引入核函數?為何對缺失數據敏感? 文章目錄 【機器學習|學習筆記】詳解支持向量機(…

Bicep入門篇

前言 Azure Bicep 是 ARM 模板的最新版本,旨在解決開發人員在將資源部署到 Azure 時遇到的一些問題。它是一款開源工具,實際上是一種領域特定語言 (DSL),它提供了一種聲明式編寫基礎架構的方法,該基礎架構描述了虛擬機、Web 應用和網絡接口等云資源的拓撲結構。它還鼓勵在…

命名實體識別15年研究全景:從規則到機器學習的演進(1991-2006)

本文精讀NRC Canada與NYU聯合發表的經典綜述《A survey of named entity recognition and classification》&#xff0c;解析NERC技術演進脈絡與核心方法論 一、為什么命名實體識別&#xff08;NER&#xff09;如此重要&#xff1f; 命名實體識別&#xff08;Named Entity Rec…

eNSP綜合實驗(DNCP、NAT、TELET、HTTP、DNS)

1搭建實驗拓撲2實驗目的學習掌握eNSP中的命令3實驗步驟3.1配置連接PC和客戶端的交換機(僅以右側為例)[Huawei]vlan batch 10 20 #創建vlan Info: This operation may take a few seconds. Please wait for a moment...done. [Huawei]un in en [Huawei]interface e0/0/2 [Huawei…

無人系統與安防監控中的超低延遲直播技術應用:基于大牛直播SDK的實戰分享

技術背景 在 無人機、機器人 以及 智能安防 等高要求行業&#xff0c;高清視頻的超低延遲傳輸 正在成為影響系統性能與業務決策的重要因素。無論是工業生產線的遠程巡檢、突發事件的應急響應&#xff0c;還是高風險環境下的智能監控與遠程控制&#xff0c;視頻鏈路的傳輸延遲都…

go語言學習之包

概念&#xff1a;在Go 語言中&#xff0c;包由一個或多個保存在同一目錄的源碼文件組成&#xff0c;包名宇目錄名無關&#xff0c;但是通常大家習慣包名和目錄名保持一致&#xff0c;同一目錄的源碼文件必須使用相同的包名。包的用途類似于其他語言的命名空間&#xff0c;可以限…

pytorch學習筆記(五)-- 計算機視覺的遷移學習

系列文章目錄 pytorch學習筆記&#xff08;一&#xff09;-- pytorch深度學習框架基本知識了解 pytorch學習筆記&#xff08;二&#xff09;-- pytorch模型開發步驟詳解 pytorch學習筆記&#xff08;三&#xff09;-- TensorBoard的介紹 pytorch學習筆記&#xff08;四&…

數字IC后端培訓教程之數字后端項目典型項目案例解析

數字IC后端低功耗設計實現案例分享(3個power domain&#xff0c;2個voltage domain) Q1: 電路如下圖&#xff0c;clk是一個很慢的時鐘test_clk&#xff08;屬于DFT的)&#xff0c;DFF1與and 形成一個clock gating check。跑pr 發現&#xff0c;時鐘樹綜合CTS階段&#xff08;C…

2025 Data Whale x PyTorch 安裝學習筆記(Windows 版)

一、Anaconda 的安裝與基本操作 1. 安裝 Anaconda/miniconda 官方鏈接&#xff1a;Anaconda | Individual Edition 根據系統版本選擇合適的安裝包下載并安裝。 2. 檢驗安裝 打開 “開始” 菜單&#xff0c;找到 “Anaconda Prompt”&#xff08;一般在 Anaconda3 文件夾…

mac OS上docker安裝zookeeper

拉取鏡像&#xff1a;$ docker pull zookeeper:3.5.7 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper no matching manifest for linux/arm64/v8 in the manifest list entries報錯&#xff1a;由于時M3…

設備通過4G網卡接入EasyCVR視頻融合平臺,出現無法播放的問題排查和解決

EasyCVR視頻融合平臺作為支持多協議接入、多設備集中管理的綜合性視頻解決方案&#xff0c;可實現各類終端設備的視頻流匯聚與實時播放。近期收到用戶反饋&#xff0c;在EasyCVR平臺接入設備后出現視頻流無法播放的情況。為幫助更多用戶快速排查同類問題&#xff0c;現將具體處…

板凳-------Mysql cookbook學習 (十二--------3)

第二章 抽象數據類型和python類 2.5類定義實例&#xff1a; 學校人事管理系統中的類 import datetimeclass PersonValueError(ValueError):"""自定義異常類"""passclass PersonTypeError(TypeError):"""自定義異常類""…

css flex 布局中 flex-direction為column,如何讓子元素的寬度根據內容自動變化

在 display: flex 且 flex-direction: column 的布局中&#xff0c;默認情況下子元素會占滿容器的寬度。要讓子元素的寬度根據內容自適應&#xff0c;而不是自動拉伸填滿父容器&#xff0c;你可以這樣處理&#xff1a;? 解決方案一&#xff1a;設置子元素 align-self: start 或…

性能優化實踐:Modbus 在高并發場景下的吞吐量提升(二)

四、Modbus 吞吐量提升實戰策略4.1 優化網絡配置選擇合適的網絡硬件是提升 Modbus 通信性能的基礎。在工業現場&#xff0c;應優先選用高性能的工業級交換機和路由器。工業級交換機具備更好的抗干擾能力和穩定性&#xff0c;其背板帶寬和包轉發率更高&#xff0c;能夠滿足高并發…

上傳ipa到appstore的幾種工具

無論是用原生開發也好&#xff0c;使用uniapp或flutter開發也好&#xff0c;最好打包好的APP是需要上架appstore的。而在app store connect上架的時候&#xff0c;需要上傳ipa文件到app store的構建版本上。因此&#xff0c;需要上傳工具。下面分析下幾種上傳工具的優缺點&…

數控調壓BUCK電路 —— 基于TPS56637(TI)

0 前言 本文基于 TI 的 TPS56637 實現一個支持調壓的 BUCK 電路&#xff0c;包含從零開始詳細的 原理解析、原理圖、PCB 及 實測數據 本文屬于《DIY迷你數控電源》系列&#xff0c;本系列我們一起實現一個簡單的迷你數控電源 我是 LNY&#xff0c;一個在對嵌入式的所有都感興…

prometheus UI 和node_exporter節點圖形化Grafana

prometheus UI 和node_exporter節點圖形化Grafana 先簡單的安裝一下 進行時間的同步操作安裝Prometheus之前必須要先安裝ntp時間同步&#xff0c;因為prometheus server對系統時間的準確性要求很高&#xff0c;必須保證本機時間實時同步。# 用crontab進行定時的時間的同步 yum …

RabbitMQ—TTL、死信隊列、延遲隊列

上篇文章&#xff1a; RabbitMQ—消息可靠性保證https://blog.csdn.net/sniper_fandc/article/details/149311576?fromshareblogdetail&sharetypeblogdetail&sharerId149311576&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 TTL …

LVS 集群技術詳解與實戰部署

目錄 引言 一、實驗環境準備 二、理論基礎&#xff1a;集群與 LVS 核心原理 2.1 集群與分布式 2.2 LVS 核心原理 LVS 的 4 種工作模式 LVS 調度算法 三、LVS 部署工具&#xff1a;ipvsadm 命令詳解 四、實戰案例&#xff1a;LVS 部署詳解 案例 1&#xff1a;NAT 模式…

前端vue3獲取excel二進制流在頁面展示

excel二進制流在頁面展示安裝xlsx在頁面中定義一個div來展示html數據定義二進制流請求接口拿到數據并展示安裝xlsx npm install xlsx import * as XLSX from xlsx;在頁面中定義一個div來展示html數據 <div class"file-input" id"file-input" v-html&qu…