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

C#高级:常用的扩展方法大全

1.String

public static class StringExtensions
{/// <summary>/// 字符串转List(中逗 英逗分隔)/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List<string>();}data = data.Replace(",", ",");//中文逗号转化为英文return data.Split(",").ToList();}/// <summary>/// 字典按序替换字符串(用key代替value)/// </summary>/// <returns></returns>public static string DictionaryReplace(this string input, Dictionary<string, string> replacements){if (string.IsNullOrEmpty(input) || replacements == null || replacements.Count == 0){return input;}foreach (var replacement in replacements){input = input.Replace(replacement.Value, replacement.Key);//用key代替value}return input;}/// <summary>/// 反序列化成实体/// </summary>public static T ConvertToEntity<T>(this string json)//可传入列表,实体{return JsonSerializer.Deserialize<T>(json);}}

2.DateTime

3.List

public static class ListExtensions
{/// <summary>/// 例如输入1 3 输出第1个(含)到第3个(含)的实体列表/// </summary>public static List<T> GetRangeList<T>(this List<T> list, int startIndex, int endIndex){// 检查索引范围是否有效if (startIndex < 1 || endIndex > list.Count || startIndex > endIndex){//throw new ArgumentOutOfRangeException("输入的索引值超出了列表的长度或范围不正确!");return new List<T>();}// 返回指定范围内的元素return list.GetRange(startIndex - 1, endIndex - startIndex + 1);}/// <summary>/// 传入列表和需要获取的数量,返回随机选出的元素/// </summary>/// <returns></returns>public static List<T> GetRandomList<T>(this List<T> list, int count){// 检查列表是否足够if (list.Count < count){//throw new ArgumentException("列表中的元素不足,无法随机选择所需数量的元素。");return new List<T>();}// 使用 Random 类生成随机索引Random random = new Random();// 随机选择不重复的元素return list.OrderBy(x => random.Next()).Take(count).ToList();}/// <summary>/// 按指定字段,顺序排序,且返回xx条/// </summary>/// <returns></returns>public static List<V> OrderByAndTake<T, V>(this List<V> list, Expression<Func<V, T>> keySelector, int count){if (list == null || !list.Any() || count <= 0){return new List<V>();}var sortedlist = list.OrderBy(keySelector.Compile());return sortedlist.Take(count).ToList();}/// <summary>/// 按指定字段,倒序排序,且返回xx条/// </summary>/// <returns></returns>public static List<V> OrderByDescAndTake<T, V>(this List<V> list, Expression<Func<V, T>> keySelector, int count){if (list == null || !list.Any() || count <= 0){return new List<V>();}var sortedlist = list.OrderByDescending(keySelector.Compile());return sortedlist.Take(count).ToList();}/// <summary>/// 传入列表,返回一个元组(索引,列表实体)/// </summary>/// <returns></returns>public static List<(int index , T entity)> GetIndexList<T>(this List<T> list){List<(int index, T entity)> result = new List<(int index, T entity)>();for (int i = 0; i < list.Count; i++){result.Add((i, list[i]));}return result;}/// <summary>/// 列表为null或空列表则返回True/// </summary>/// <returns></returns>public static bool IsNullOrEmpty<T>(this List<T> list){return list == null || !list.Any();}/// <summary>/// 一个实体列表映射到另一个实体列表(属性名称相同则映射)/// </summary>public static List<TTarget> MapToList<TTarget>(this IEnumerable<object> sourceList) where TTarget : new(){var targetList = new List<TTarget>();foreach (var source in sourceList){var target = new TTarget();var sourceProperties = source.GetType().GetProperties(); // 使用实际对象的类型var targetProperties = typeof(TTarget).GetProperties();foreach (var sourceProp in sourceProperties){var targetProp = targetProperties.FirstOrDefault(tp => tp.Name == sourceProp.Name && tp.CanWrite);if (targetProp != null && targetProp.PropertyType == sourceProp.PropertyType){targetProp.SetValue(target, sourceProp.GetValue(source));}}targetList.Add(target);}return targetList;}/// <summary>/// 列表转JSON(string)/// </summary>/// <returns></returns>public static string ConvertToJson<T>(this List<T> sourceList)//可传入列表,实体{var options = new JsonSerializerOptions{Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping // 禁用 Unicode 转义,防止中文字符转义为 Unicode};return JsonSerializer.Serialize(sourceList, options);}}

4.Entity

public static class EntityExtensions
{/// <summary>/// 实体转JSON/// </summary>public static string ConvertToJson<T>(T entity)//可传入列表,实体{var options = new JsonSerializerOptions{Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping // 禁用 Unicode 转义,防止中文字符转义为 Unicode};return JsonSerializer.Serialize(entity, options);}/// <summary>/// 将一个实体映射到另一个实体(属性名称相同且类型匹配的属性将映射)/// </summary>public static TTarget MapToEntity<TTarget>(this object source) where TTarget : new(){var target = new TTarget();var sourceProperties = source.GetType().GetProperties(); // 获取源实体的属性var targetProperties = typeof(TTarget).GetProperties(); // 获取目标实体的属性foreach (var sourceProp in sourceProperties){var targetProp = targetProperties.FirstOrDefault(tp => tp.Name == sourceProp.Name && tp.CanWrite);if (targetProp != null && targetProp.PropertyType == sourceProp.PropertyType){targetProp.SetValue(target, sourceProp.GetValue(source));}}return target;}/// <summary>/// 通过反射设置实体的值/// </summary>/// <typeparam name="T"></typeparam>/// <returns></returns>public static void SetValueByReflect<T>(this T entity, string feildName, object feildValue) where T : class{var feild = typeof(T).GetProperty(feildName);var feildType = feild?.PropertyType;if (feild != null && feildType != null){var valueToSet = Convert.ChangeType(feildValue, feildType);//输入的值类型转化为实体属性的类型feild.SetValue(entity, valueToSet);}}
}

相关文章:

C#高级:常用的扩展方法大全

1.String public static class StringExtensions {/// <summary>/// 字符串转List&#xff08;中逗 英逗分隔&#xff09;/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...

Consul持久化配置报错1067---consul_start

报错都是文件写的有问题或者格式问题&#xff0c;直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在&#xff1a;mydata 注&#xff1a;D:\consul\consul_1.20.2_windows_386改成自己consul的…...

「 机器人 」扑翼飞行器控制策略浅谈

1. 研究背景 • 自然界中的蜂鸟以极高的机动能力著称,能够在短至0.2秒内完成如急转弯、快速加速、倒飞、躲避威胁等极限机动。这种表现对微型飞行器(Flapping Wing Micro Air Vehicles, FWMAVs)具有重要的仿生启示。 • 目前的微型飞行器距离自然生物的飞行能力仍有相当差距…...

Qt信号与槽底层实现原理

在Qt中,信号与槽是实现对象间通信的核心机制, 类似于观察者模式。当某个事件发生后,比如按钮被点击,就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,将想要处理的信号和自己的一个函数(称为槽…...

QT QTableWidget控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

Flutter_学习记录_基本组件的使用记录

1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有&#xff1a; TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例&#xff1a; body: Center(child: Text(开启 TextWidget 的旅程吧&#xff0c;珠珠, 开启 TextWidget 的旅程吧&a…...

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘

解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal&#xff0c;选择版本后点击“install”执行安装...

Gin 应用并注册 pprof

pprof 配置与使用步骤 1. 引言 通过下面操作&#xff0c;你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据&#xff0c;并通过图形化界面进行深度分析。 1. 安装依赖 首先&#xff0c;确保安装了 gi…...

Jenkins 启动

废话 这一阵子感觉空虚&#xff0c;心里空捞捞的&#xff0c;总想找点事情做&#xff0c;即使这是一件微小的事情&#xff0c;空余时间除了骑车、打球&#xff0c;偶尔朋友聚会 … 还能干什么呢&#xff1f; 当独自一人时&#xff0c;究竟可以做点什么&#xff0c;填补这空虚…...

第20篇:Python 开发进阶:使用Django进行Web开发详解

第20篇&#xff1a;使用Django进行Web开发 内容简介 在上一篇文章中&#xff0c;我们深入探讨了Flask框架的高级功能&#xff0c;并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django&#xff0c;另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...

文献引用指南ChatGPT提示词分享

文献引用指南 在学术写作中&#xff0c;准确引用是至关重要的环节。它不仅能够为您的研究提供坚实的学术基础&#xff0c;还能确保您尊重并认可他人的学术成果&#xff0c;从而有效避免抄袭的问题。而ChatGPT在这一方面同样能够为您提供有力的支持。借助ChatGPT&#xff0c;您…...

程序代码篇---C++类.c\.h

文章目录 前言第一部分&#xff1a;C中的类1.类的定义2.成员变量&#xff08;属性&#xff09;3.成员函数&#xff08;方法&#xff09;4.访问修饰符私有受保护公有 5.构造函数和析构函数成员初始化列表方法重载 6.继承7.多态8.友元 第二部分&#xff1a;.c与.h文件头文件&…...

@RabbitListener处理重试机制完成后的异常捕获

application.properties中配置开启手动签收 spring.rabbitmq.listener.direct.acknowledge-modemanual spring.rabbitmq.listener.simple.acknowledge-modemanual定义一个重试器 Slf4j Configuration public class RabbitMQRetryConfing {Bean("customRetry")publi…...

Mac 上管理本地 Go 版本

在 Mac 上修改本地 Go 版本可以通过多种方法实现。以下是几种常见且详细的操作方案&#xff1a; 方法一&#xff1a;使用 goenv 管理多版本&#xff08;推荐&#xff09; 适用场景&#xff1a;需要频繁切换不同 Go 版本&#xff0c;适合长期开发者。 步骤&#xff1a; 安装 g…...

低代码系统-产品架构案例介绍、得帆云(八)

产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台&#xff0c;区别于阿里云、腾讯云 Dehoop 指…...

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…...

JavaEE:多线程进阶

JavaEE&#xff1a;多线程进阶 一、对比不同锁策略之间的应用场景及其区别1. 悲观锁 和 乐观锁1.1 定义和原理1.2 应用场景1.3 示例代码 2. 重量级锁 和 轻量级锁2.1 定义和原理2.2 应用场景2.3 示例代码 3. 挂起等待锁 和 自旋锁3.1 定义和原理3.2 应用场景3.3 示例代码 4. 几…...

不只是mini-react第二节:实现最简fiber

省流|总结 首先&#xff0c;我们编写JSX文件&#xff0c;并通过Babel等转换工具将其转化为createElement()函数的调用&#xff0c;最终生成虚拟 DOM&#xff08;Vdom&#xff09;格式。举个例子&#xff1a; // 原始 JSX const App <div>hi-mini-react</div>;//…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...