【C#】通用类型转换
【C#】通用类型转换
- 自动类型转换(隐式类型转换)
- 强制类型转换(显式类型转换)
- 通过函数进行转换(通过方法进行类型转换)
- 使用 as 操作符转换
- 通用类型转换方法实现
数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。
自动类型转换(隐式类型转换)
自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。
例如:
int i = 100;
double d = i;
敲黑板:
- 转换前后的类型必须相兼容 例如:int和double
- 隐式数值转换实际上就是从低精度的数值类型到高精度的数值类型的转换,即小的类型转大的类型
强制类型转换(显式类型转换)
与自动转换正好相反,强制转换需要用户明确地指定转换的类型。显式转换包括所有的隐式转换,也就是说把任何系统允许的隐式转换写成显式转换的形式都是允许的
例如:
double d = 100.00;
int i = (int)d;
敲黑板:
- 显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。
- 强制类型转换会造成数据精度丢失。
通过函数进行转换(通过方法进行类型转换)
函数转换,顾名思义通过编写类型处理方法的形式达到转换类型的目的。
int i;
string str = "100";
i = int.Parse(str);
int.TryParse(str, out i); // 推荐使用,对比 int.Parse(str) 多了异常处理增强了代码的健壮性
- 常用类型转换方法
方法 | 说明 |
---|---|
ToString | C# 基类型是 Object 所以所有的类型都有 ToString()。转字符串类型 |
Convert.ToChar | 转换为字符型(char) |
Convert.ToString | 转换为字符串型(string) |
Convert.ToDateTime | 转换为日期型(datetime) |
Convert.ToDouble | 转换为双精度浮点型(double) |
Conert.ToSingle | 转换为单精度浮点型(float) |
Convert.ToBase64CharArray | 将数组中的项进行 Base64 编码 |
Convert.ToBase64String | 将字符串进行 Base64 编码 |
Convert.ToBoolean | 转换为布尔类型(bool) |
Convert.ToDecimal | 转换为等效的十进制数 |
Convert.ToSByte | 转换为 8 位带符号整数 |
Convert.ToInt32 | 转换为 32 位带符号整数 |
Convert.ToInt16 | 转换为 16 位带符号整数 |
Convert.ToInt64 | 转换为 64 位带符号整数 |
Convert.ToByte | 转换为 8 位无符号整数 |
Convert.ToUInt16 | 转换为 16 位无符号整数 |
Convert.ToUInt32 | 转换为 32 位无符号整数 |
Convert.ToUInt64 | 转换为 64 位无符号整数 |
使用 as 操作符转换
使用
as
操作符具有 高效 和 安全 的特点:
as
操作符不会做过的转换操作,当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型时,那么此转换操作才能成功,而且并不产生新的对象当不成功的时候,会返回null
。
当用as
操作符进行类型转换的时候,首先判断当前对象的类型,当类型满足要求后才进行转换,而传统的类型转换方式,是用当前对象直接去转换,而且为了保护转换成功,要手动加上try-catch
,所以相对来说,as
效率高。
敲黑板:
as
转换不成功会返回null
因此在无法确定转换结果的情况下一定一定要进行判空。as
也有一定的限制:- 不用在类型之间进行类型转化
- 不能应用在值类型数据 - 只支持引用类型
通用类型转换方法实现
通用类型转换方法本质还是方法进行类型转换的方式,确切来说是 Convert 的形式。
不同于现有的转换方法有固定的类型,通用型是通过 泛型 约束来定义目标转换类型。并且使用扩展方法的形式是的调用起来非常的容易,且可以进行链式编程。
public static class Extensions
{public static T Parse<T>(this object value, T defaultValue = default){var type = typeof(T);try{var nullableType = Nullable.GetUnderlyingType(type);if (nullableType is null)return (T)Convert.ChangeType(value, type);return (T)Convert.ChangeType(value, nullableType);}catch{return defaultValue;}}
}
备注
- 还可以通过继承接口
IConventible
或者TypeConventer
类,从而实现自己的转换。
相关文章:
【C#】通用类型转换
【C#】通用类型转换 自动类型转换(隐式类型转换)强制类型转换(显式类型转换)通过函数进行转换(通过方法进行类型转换)使用 as 操作符转换通用类型转换方法实现 数据类型转换就是将数据(变量、数…...
传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析
1、DNS 服务器 DNS 服务器可以在一定程度上用作服务发现的机制,以下是其冲动服务发现的一些利弊 优势 广泛性: DNS是互联网的标准协议之一,已经广泛地被支持和使用。因此,使用DNS作为服务发现的机制可以借助现有的网络基础设施…...
js中数组常用操作函数
js数组经常会用到,当涉及到 JavaScript 数组的函数,有许多常用的函数可用于对数组进行操作和转换。以下是一些常见的数组函数的讲解 splice() splice() 函数用于修改数组,可以删除、插入或替换数组中的元素。 var fruits [apple, banana,…...
Windows、Mac、Linux端口占用解决
Windows、Mac、Linux端口占用解决 简介 在使用计算机网络时,经常会遇到端口被占用的问题。当一个应用程序尝试使用已经被其他程序占用的端口时,会导致端口冲突,使应用程序无法正常运行。本文将介绍在Windows、Mac和Linux操作系统上解决端口…...
企业文件透明加密软件——「天锐绿盾」数据防泄密管理软件系统
PC访问地址: 首页 一、文档透明加密软件 文档透明加密功能:在不影响单位内部员工对电脑任何正常操作的前提下,文档在复制、新建、修改时被系统强制自动加密。文档只能在单位内部电脑上正常使用,在外部电脑上使用是乱码或无法打…...
Postman接口自动化测试实例
一.实例背景 在实际业务中,经常会出现让用户输入用户密码进行验证的场景。而为了安全,一般都会先请求后台服务器获取一个随机数做为盐值,然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器,后台服务器接到…...
软件团队降本增效-构建人员评价体系
在软件团队中,最大成本往往来自于人力。这是因为软件开发是一项高度技术密集和智力密集的工作,需要研发人员具备较高的专业知识和技能。研发人员的工作状态和主动性对产出和质量具有极大的影响。如果研发人员缺乏积极性和投入度,可能会导致项…...
Python实现SSA智能麻雀搜索算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…...
web JS高德地图标点、点聚合、自定义图标、自定义窗体信息、换肤等功能实现和高复用性组件封装教程
文章目录 前言一、点聚合是什么?二、开发前准备三、API示例1.引入高德地图2.创建地图实例3.添加标点4.删除标点5.删除所有标点(覆盖物)6.聚合点7.自定义聚合点样式8.清除聚合9.打开窗体信息 四、实战开发需求要求效果图如下:封装思…...
AlpacaFarm: A Simulation Framework for Methods that Learn from Human Feedback
本文是LLM系列文章,针对《》的翻译。 AlpacaFarm:从人类反馈中学习方法的模拟框架 摘要1 引言2 背景与问题描述3 构造AlpacaFarm4 验证AlpacaFarm模拟器5 AlpacaFarm的基准参考方法6 相关工作7 不足和未来方向 摘要 像ChatGPT这样的大型语言模型由于能够很好地遵循…...
【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)
🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛹Linux 🛸C 📕 学习格言:博观而约取ÿ…...
自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -@Autowried
😀前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -Autowried 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家&…...
linux的http服务
Web通信基本概念 基于B/S(Browser/Server)架构的网页服务 服务端提供网页 浏览器下载并显示网页 Hyper Text Markup Lanuage,超文本标记语言 Hyper Text Transfer Protocol,超文本传输协议 虚拟机A:构建基本的Web服务 [root…...
Restful架构简单了解
Restful Rest全称representational status transfer 表述性状态转移。 原则 资源与URI URI既可以看成是资源的地址,也可以看成是资源的名称。如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。URI的设计…...
conda常用命令
使用conda可以在电脑上创建很多套相互隔离的Python环境,命令如下: 创建环境 创建一个名为deeplearning的环境,python版本为3.7 conda create --name deeplearning python3.7查看版本 conda --version切换环境 切换到deeplearning环境 c…...
Linux:shell脚本:基础使用(6)《正则表达式-awk工具》
简介 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 1)awk命令会逐行读取文件的内容进行处理 2)a…...
国际阿里云腾讯云:阿里云服务器怎么打包
近年来,跟着云计算的发展,越来越多的人开始运用云服务器来保管自己的运用和网站。其间,阿里云服务器是国内最大的云计算服务供给商之一,能够供给高效安稳的服务器服务。可是,阿里云服务器的打包办法相较于其他云服务器…...
FPGA中锁存器(latch)、触发器(flip-flop)以及寄存器(register)详解
文章目录 1 定义1.1 锁存器(latch)1.2 触发器(flip-flop)1.3 寄存器(register) 2 比较2.1 锁存器(Latch)危害即产生原因2.2 寄存器和锁存器的区别2.3 锁存器和触发器的区别 3 结构3.…...
【正点原子STM32连载】第十八章 通用定时器PWM输出实验 摘自【正点原子】APM32F407最小系统板使用指南
1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第十…...
分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测
分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测 目录 分类预测 | MATLAB实现BWO-TCN-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.BWO-TCN-Attention数据分类预测程序; 2.无Attention适用于MATLAB 2022b版及以上版本…...
6.链路追踪-Zipkin
链路追踪(Distributed Tracing)是一种用于监视分布式应用程序的技术,通过收集和展示分布式系统中不同组件之间的调用和交互情况,帮助开发人员和运维团队理解系统中的请求流程、性能瓶颈和异常情况。 1.Zipkin Zipkin 是一个开源的…...
基于ACF,AMDF算法的语音编码matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .......................................................................... plotFlag …...
python 基础篇 day 1 初识变量和数据类型
文章目录 变量变量作用——用于存储和表示数据。变量命名规则命名法大驼峰小驼峰下划体n j i a x 通常作为临时变量使用 建议 变量种类全局变量(Global Variables)局部变量(Local Variables)静态变量(Static Variables…...
Window下部署使用Stable Diffusion AI开源项目绘图
Window下部署使用Stable Diffusion AI开源项目绘图 前言前提条件相关介绍Stable Diffusion AI绘图下载项目环境要求环境下载运行项目打开网址,即可体验文字生成图像(txt2img)庐山瀑布 参考 本文里面的风景图,均由Stable Diffusion…...
【MySQL】好好学习一下InnoDB中的页
文章目录 一. 前言二. 从宏观层面看页三. 页的基本内容3.1 页的数据结构3.2 用户空间内的数据行结构3.3 页目录 四. 问题集4.1 索引 和 数据页 有什么区别4.2 页的大小是什么决定的4.3 页的大小对哪些情况有影响4.4 一般情况下说的链表有哪几个4.5 如果页的空间满了怎么办4.6 如…...
git开发常用命令
版本回退 soft:git reset --soft HEAD^ 将版本库回退一个版本,且这次提交的所有文件都移动到暂存区 mixed(默认):git reset HEAD^ 将版本库回退一个版本,且这次提交的所有文件都移动到工作区,会…...
WEB APIs day5
一、window对象 BOM属于window对象 1.BOM(浏览器对象模型) bom里面包含着dom,只不过bom我们平时用得比较少,我们经常使用的是dom操作,因为我们页面中的这些标签都是在dom中取的,所以我们操作dom多一点。 window对象…...
html动态爱心代码【一】(附源码)
前言 七夕马上就要到了,为了帮助大家高效表白,下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐,可用于520,情人节,生日,表白等场景,可直接使用。 效果演示 文案修改 var loverNam…...
【仿写tomcat】六、解析xml文件配置端口、线程池核心参数
线程池改造 上一篇文章中我们用了Excutors创建了线程,这里我们将它改造成包含所有线程池核心参数的形式。 package com.tomcatServer.http;import java.util.concurrent.*;/*** 线程池跑龙套** author ez4sterben* date 2023/08/05*/ public class ThreadPool {pr…...
Android Studio 接入OpenCV最简单的例子 : 实现灰度图效果
1. 前言 上文 我们在Windows电脑上实现了人脸功能,接下来我们要把人脸识别的功能移植到Android上。 那么首先第一步,就是要创建一个Native的Android项目,并且配置好OpenGL,并能够调用成功。 这里我们使用的是openCV-4.8.0&#x…...
网站备份与恢复/杭州seo平台
若一个串正向看和反向看等价,则称做回文串。例如:t,abba,xyzyx均是回文串。 给出一个长度不超过60的字符串,判断是否是回文串。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组…...
java做教程网站/免费个人博客网站
第1关:Hyperledger Fabric 基本概念 任务描述 本关任务:根据本实训的相关知识,完成与 Hyperledger Fabric 基本概念相关的选择题。 相关知识 超级账本介绍 超级账本,即 Hyperledger,是区块链技术中第一个面向企业级应用场景的开源分布式账本平台。 2015年12月由 Linux …...
极简风格 网站/长尾关键词快速排名软件
持续交付指的是在短周期内完成软件产品,以保证软件保持在随时可以发布的状态。让每一个变更都经过一条自动化的检验流水线,来检查每一个变更的质量,通过就进入下一个阶段。其不是一种工具,而是一种实践!持续交付的共识…...
精美wordpress模板/新乡seo网络推广费用
修改mysql root用户密码 1) 停止mysql服务 windowsR运行输入services.msc 停止mysql服务 右键选择停止 或者 cmd –> net stop mysql 2) 在cmd下 输入 mysqld –skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口) 3) 新打开cmd 输入mysql -…...
wordpress 获取页面id/肇庆疫情最新情况
2019独角兽企业重金招聘Python工程师标准>>> 一般情况下使用 import xlwt 但是这个保存的文件格式实际上是excel 2003的格式,列对多只能255列 import xlrd 用来读取excel,源代码读取列只能是 0 < x < 255 ,需要手动改一下源代码 不能使用xlwt保存文件为xlsx文…...
wordpress用户筛选/佛山网站seo
眨眼间已经到了12月9号啦,昨天教资笔试出成绩,过啦嘿嘿,不过很快就要面试了,现在还是毫无准备 的状态,但我觉得应该开始准备起来了。 还是先学习前端的东西叭。 原来路由的权限设置跟工厂模式有关呢。 链接ÿ…...