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(中逗 英逗分隔)/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...
Consul持久化配置报错1067---consul_start
报错都是文件写的有问题或者格式问题,直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在:mydata 注: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: 文本对齐属性 常用的样式有: TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例: body: Center(child: Text(开启 TextWidget 的旅程吧,珠珠, 开启 TextWidget 的旅程吧&a…...
基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介: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,选择版本后点击“install”执行安装...
Gin 应用并注册 pprof
pprof 配置与使用步骤 1. 引言 通过下面操作,你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据,并通过图形化界面进行深度分析。 1. 安装依赖 首先,确保安装了 gi…...
Jenkins 启动
废话 这一阵子感觉空虚,心里空捞捞的,总想找点事情做,即使这是一件微小的事情,空余时间除了骑车、打球,偶尔朋友聚会 … 还能干什么呢? 当独自一人时,究竟可以做点什么,填补这空虚…...
第20篇:Python 开发进阶:使用Django进行Web开发详解
第20篇:使用Django进行Web开发 内容简介 在上一篇文章中,我们深入探讨了Flask框架的高级功能,并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django,另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...
文献引用指南ChatGPT提示词分享
文献引用指南 在学术写作中,准确引用是至关重要的环节。它不仅能够为您的研究提供坚实的学术基础,还能确保您尊重并认可他人的学术成果,从而有效避免抄袭的问题。而ChatGPT在这一方面同样能够为您提供有力的支持。借助ChatGPT,您…...
程序代码篇---C++类.c\.h
文章目录 前言第一部分:C中的类1.类的定义2.成员变量(属性)3.成员函数(方法)4.访问修饰符私有受保护公有 5.构造函数和析构函数成员初始化列表方法重载 6.继承7.多态8.友元 第二部分:.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 版本可以通过多种方法实现。以下是几种常见且详细的操作方案: 方法一:使用 goenv 管理多版本(推荐) 适用场景:需要频繁切换不同 Go 版本,适合长期开发者。 步骤: 安装 g…...
低代码系统-产品架构案例介绍、得帆云(八)
产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台,区别于阿里云、腾讯云 Dehoop 指…...
免费GPU算力,不花钱部署DeepSeek-R1
在人工智能和大模型技术飞速发展的今天,越来越多的开发者和研究者希望能够亲自体验和微调大模型,以便更好地理解和应用这些先进的技术。然而,高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是,腾讯云Cloud Studio提供了免…...
JavaEE:多线程进阶
JavaEE:多线程进阶 一、对比不同锁策略之间的应用场景及其区别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
省流|总结 首先,我们编写JSX文件,并通过Babel等转换工具将其转化为createElement()函数的调用,最终生成虚拟 DOM(Vdom)格式。举个例子: // 原始 JSX const App <div>hi-mini-react</div>;//…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...
