【笔记】C# 数据类型转换
文章目录
- 前言
- 类型转换的概念
- 1,隐式转换
- 2,显式转换
- 3,程序类转换
- 结语
前言
🌻 大家好啊,我是writer桑,本章是关于 C# 数据类型转换的一个总结,其中包含隐式、显示转换和程序类转换,方便自己学习查阅的同时分享出来,感谢支持。
类型转换的概念
C# 作为一种静态类型的编程语言,变量在声明之后就无法再次声明。 或者无法分配另一种类型的值,除非该类型可以进行隐式转换为变量的类型。 比方说 string 类型无法隐式转换为 int。但有时确实需要将值复制到其他类型的变量或方法参数中,例如把 int 类型的变量转换为 double 类型。这些类型转换的操作就成为类型转换。
下表展示 C# 中可以执行的几种类型转换操作:
| 转换操作 | 描述 |
|---|---|
| 隐式转换 | 由于这种转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。 |
| 显式转换(强制转换) | 必须使用强制转换表达式,才能执行显式转换。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须进行强制转换。 典型的示例包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。 |
| 程序类转换 | 若要在非兼容类型(如整数和 System.DateTime 对象,或十六进制字符串和字节数组)之间转换,可使用 System.BitConverter 类、System.Convert 类和内置数值类型的 Parse 方法(如Int32.Parse)。 |
1,隐式转换
对于内置的数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。对于整型类型,这意味着源类型的范围是目标类型范围的正确子集。 例如,long 类型(64位)的变量可以存储 int(32位)可存储的任何值。 隐式转换是 C# 默认的以安全方式进行的转换,不会导致数据丢失。
示例如下:
int num = 2147483647;
long bigNum = num;Console.WriteLine(bigNum); // 2147483647
Console.WriteLine(bigNum.GetType()); // System.Int64
上例展示的值类型之间的转换。而对于引用类型,隐式转换始终存在于从一个类转换为该类的任何一个直接或间接的基类或接口的情况。 由于派生类始终包含基类的所有成员,因此不必使用任何特殊语法。
示例如下:
using System; public class Base
{public void baseMethod(){Console.WriteLine("Hello,Base");}
}public class Derived : Base
{// 派生类方法实现
}public class Program
{static void Main(string[] args){Derived d = new Derived();Base b = d; // 引用类型转换 b.baseMethod(); // "Hello,Base" }
}
下表展示了 C# 支持的内置数值类型之间的预定义隐式转换:
| 从 | 到 |
|---|---|
| sbyte | short、int、long、float、double、decimal 或 nint。 |
| byte | short、ushort、int、uint、long、ulong、float、double、decimal、nint 或 nuint |
| short | int、long、float、double、decimal 或 nint |
| ushort | int、uint、long、ulong、float、double、decimal、nint 或 nuint |
| int | long、float、double、decimal 或 nint |
| uint | long、ulong、float、double、decimal 或 nuint |
| long | float、double 或 decimal |
| ulong | float、double 或 decimal |
| float | double |
| nint | long、float、double 或 decimal |
| nuint | ulong、float、double 或 decimal |
注意:
- 任何整型数值类型都可以隐式转换为任何浮点数值类型。
- 不存在针对 byte 和 sbyte 类型的隐式转换。 不存在从 double 和 decimal 类型的隐式转换。
- decimal 类型和 float 或 double 类型之间不存在隐式转换。
- 类型 int 的常量表达式的值(例如,由整数文本所表示的值)如果在目标类型的范围内,则可隐式转换为 sbyte、byte、short、ushort、uint、ulong、nint 或 nuint 。
2,显式转换
显示转换又称为强制转换。当类型转换可能会导致信息丢失时,则需要执行显示转换。 显示转换可以理解为: 你打算进行转换且你知道可能会发生数据丢失,或者你知道强制转换有可能在运行时失败。 若要执行强制转换,请在要转换的值或变量前面使用 () 标识符指定要强制转换到的类型。
示例如下:
using System; public class Program
{static void Main(){double x = 1234.7;int a;// 将double类型转换为int类型。 a = (int)x;Console.WriteLine(a);}
}// 输出:1234
上例演示的是值类型之间的强制类型转化。 对于引用类型,如果需要从基类转换为派生类型, 则必须进行显示强制转换。
示例如下:
using System;public class Base
{public void baseMethod(){Console.WriteLine("Hello,Base");}
}public class Derived : Base
{// 派生类方法实现
}public class Program
{static void Main(string[] args){Derived d1 = new Derived();Base b = d1; // 隐式转换, 派生类转换为基类 Derived d2 = (Derived)b; // 显示转换,基类转换为派生类 Console.WriteLine(d2); // Derived }
}
下表展示了 C# 不存在隐式转换的内置数值类型之间的预定义显式转换:
| 从 | 到 |
|---|---|
| sbyte | byte、ushort、uint、ulong 或 nuint |
| byte | sbyte |
| short | sbyte、byte、ushort、uint、ulong 或 nuint |
| ushort | sbyte、byte 或 short |
| int | sbyte、byte、short、ushort、uint、ulong 或 nuint。 |
| uint | sbyte、byte、short、ushort 或 int |
| long | sbyte、byte、short、ushort、int、uint、ulong、nint 或 nuint |
| ulong | sbyte、byte、short、ushort、int、uint、long、nint 或 nuint |
| float | sbyte、byte、short、ushort、int、uint、long、ulong、decimal、nint 或 nuint |
| double | sbyte、byte、short、ushort、int、uint、long、ulong、float、decimal、nint 或 nuint |
| decimal | sbyte、byte、short、ushort、int、uint、long、ulong、float、double、nint 或 nuint |
| nint | sbyte、byte、short、ushort、int、uint、ulong 或 nuint |
| nuint | sbyte、byte、short、ushort、int、uint、long 或 nint |
注意:
- 显式数值转换可能会导致数据丢失或引发异常,通常为 OverflowException(溢出异常)。
- 将整数类型的值转换为另一个整数类型时,结果取决于溢出检查上下文,在未检查的上下文中,则转换始终成功。
- 将 decimal 值转换为整型类型时,此值会向零舍入到最接近的整数值。
- 将 double 或 float 值转换为整型类型时,此值会向零舍入到最接近的整数值。
- 将 double 转换为 float 时,double 值舍入为最接近的 float 值。 如果 double 值太小或太大,无法匹配 float 类型,结果将为零或无穷大。
- 将 decimal 转换为 float 或 double 时,源值分别舍入为最接近的 float 或 double 值。
- 将 float 或 double 转换为 decimal 时, 如果源值太小,无法表示为 decimal,结果为零。
3,程序类转换
除了隐式和显式转换之外,C# 还提供了内置的 System.Convert 类和 Parse 方法来帮助类型转换。System.Convert 类可以将一个基本数据类型转换为另一个基本数据类型。 而例如 Int32.Parse 方法可以将数字的字符串表示形式转换为它的等效 32 位有符号整数。
列举 System.Convert 类中常用的转换方法:
| 方法 | 描述 |
|---|---|
| ToBoolean | 转换为等效的布尔值。 |
| ToByte | 转换为等效的 8 位无符号整数。 |
| ToChar | 转换为等效的 Unicode 字符值。 |
| ToDateTime | 返回指定的 DateTime 对象。 |
| ToDecimal | 转换为等效的十进制数 |
| ToDouble | 转换为等效的双精度浮点数。 |
| ToInt16 | 转换为等效的 16 位带符号整数。 |
| ToInt32 | 转换为等效的 32 位带符号整数。 |
| ToInt64 | 转换为等效的 64 位带符号整数。 |
| ToSbyte | 转换为等效的 8 位带符号整数。 |
| ToSingle | 转换为等效的单精度浮点数。 |
| ToString | 转换为其等效的字符串表示形式。 |
| ToUInt16 | 转换为无符号 16 位整数。 |
| ToUInt32 | 转换为无符号 32 位整数。 |
| ToUInt64 | 转换为无符号 64 位整数。 |
示例如下:
using System;public class Program
{static void Main(string[] args){string s = "123"; int i = 75;float f = 53.005f;double d = 2345.7652;bool b = true;Console.WriteLine(Convert.ToInt32(s)); // 123Console.WriteLine(Convert.ToString(i)); // 75 Console.WriteLine(Convert.ToDouble(f)); // 53.005001068115234 Console.WriteLine(Convert.ToSingle(d)); // 2345.7651Console.WriteLine(Convert.ToInt32(b)); // 1}
}
列举 C# 常用的 Parse 方法:
| 方法 | 描述 |
|---|---|
| int.Parse(string s) | 将数字的字符串转换为它的等效的整数类型。 |
| float.Parse(string s) | 将数字的字符串转换为它的等效的单精度浮点类型。 |
| double.Parse(string s) | 将数字的字符串转换为它的等效的双精度浮点类型。 |
| decimal.Parse(string s) | 将数字的字符串转换为它的等效的精准数据类型。 |
| char.Parse(string s) | 将数字的字符串转换为它的等效的字符类型。 |
示例如下:
string s = "11";
string c = "1";Console.WriteLine(int.Parse(s)); // 11
Console.WriteLine(float.Parse(s)); // 11
Console.WriteLine(double.Parse(s)); // 11
Console.WriteLine(decimal.Parse(s)); // 11
Console.WriteLine(char.Parse(c)); // 1
结语
🌲 以上就是 C# 数据类型转换的总结啦,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!
相关文章:
【笔记】C# 数据类型转换
文章目录前言类型转换的概念1,隐式转换2,显式转换3,程序类转换结语前言 🌻 大家好啊,我是writer桑,本章是关于 C# 数据类型转换的一个总结,其中包含隐式、显示转换和程序类转换,方便…...
JavaWeb JavaBean,MVC三层架构
9、JavaBean 实体类 JavaBean有特定的写法: 必须要有一个无参构造属性必须私有化必须有对应的get/set方法; 一般用来和数据库的字段做映射 ORM; ORM :对象关系映射 表—>类字段–>属性行记录---->对象 people表 …...
JavaEE简单实例——MyBatis一对多关联映射的嵌套结果集查询
简单介绍: 在之前的章节,我们简单介绍了MyBatis中的一对一的关联查询,使用了嵌套查询和嵌套结果集两种方式进行讲解,但是在实际的使用中,我们常用的是嵌套结果集的查询方式,所以在一对多的查询中ÿ…...
大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出
3.6.1OutputFormat接口实现类 OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。下面我们介绍几种常见的OutputFormat实现类。 1、文本输出TextOutputFormat 默认的输出格式是TextOutputFormat,它把每条记录写为文…...
Linux搜索、编辑
目录 1.搜索 1.1.基础用法 1.2.高级用法 2.编辑 2.1.vim简洁 2.2.vim快捷键 1.搜索 1.1.基础用法 find命令用于搜索,格式如下: find 指定目录 -匹配方式 所要匹配的关键字 所要匹配的关键字支持通配符,?代表一个字符*代表任意个字符。 如果想设…...
Git Commit提交规范总结
文章目录前言git commit 提交规范提交消息头(commit message header)提交消息具体内容(commit message body)提交消息尾述(commit message footer)Revert表情(Emojis)标识idea插件其他操作Commitizen生成 Change logGit获取提交消息格式化输出相关参考前言 我们都知道…...
【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于ESP8266和EMQX的教室灯光控制系统
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-26 ❤️❤️ 本篇更新记录 2022-02-26 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
SpringBoot (一) 项目构建、配置读取、静态资源定义
哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 前言 SpringBoot是基于Spring开发的开源项目,…...
<JVM上篇:内存与垃圾回收篇>12 - 垃圾回收相关概念
笔记来源:尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机) 文章目录12.1. System.gc()的理解12.2. 内存溢出与内存泄露内存溢出(OOM)内存泄漏(Memory Leakÿ…...
new操作符做了什么?
new是什么? new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 function Person (name,age) {this.name namethis.age age } Person.prototype.sayName function () {console.log(this.name) } let man new Person(xl,20) consol…...
Java_IO流,书城IO版
1.字符IO流的输入/输出 首先,IO流根据多方面划分。 根据方向划分 输入流/输出流根据处理单元划分 字节流/字符流根据功能划分 节点流/处理流 尝试一下使用字符输入流在读写文件: package IOStream;import java.io.*;public class Test {public stati…...
2023自动化测试岗位需求的 7 项必备技能 (最新版)
目录:导读 一、自动化测试员技能——编程语言 二、自动化测试员技能–出色的手动测试技能 三、.自动化测试员技能–自动化工具专业知识 四、自动化测试员技能–了解业务需求 五、自动化测试员技能–自动化工具故障排除 六、自动化测试员技能–具有测试管理工具…...
【华为OD机试模拟题】用 C++ 实现 - 路灯照明(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明路灯照明【华为OD机试模拟题】题目输入输出描述示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…...
学到贫血之-贫血模型和充血模型
学习自:设计模式之美 1 基于贫血模型的传统开发模式 // ControllerVO(View Object) public class UserController {private UserService userService; //通过构造函数或者IOC框架注入public UserVo getUserById(Long userId) {UserBo userBo userService.getUser…...
Java常用组件面试题
文章目录HTTP通信协议Kafka消息队列Linux操作系统Mybatis框架SpringCloud框架HTTP通信协议 https通信过程 https协议是指对通过http协议传输数据的进行加密和解密。当客户端发送https请求时,服务端会返回数字证书给客户端,客户端验证通过后会生成随机数…...
MySQL常见问题的解决方法
目录 cmd没有管理员权限 没有my.ini这个文件 ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 其他常见问题 cmd没有管理员权限 cmd一定要用管理员权限打…...
全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务…...
容斥恒等式的证明
容斥恒等式的证明 推广公式 P(A∪B)P(A)P(B)−P(A∩B)P(A\cup B)P(A)P(B)-P(A\cap B) P(A∪B)P(A)P(B)−P(A∩B) (a)设A、B、C为三个事件,则下列恒等式成立: P(A∪B∪C)P(A)P(B)P(C)−P(A∩B)−P(A∩C)−P(B∩C)P(A∩B∩C)P(A\cup B\cup C)P(A)P(B)P(C)…...
Java中的this与super关键字深度解析
一、this关键字this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。(1)this.属性名this修饰的变量用于指代成员变量方法的形参如果…...
CSS3新增的视口单位Vh、Vw单位
定义vw:浏览器可见视口【宽度】的百分比(1vw代表视窗【宽度】的1%)vh:浏览器可见视口【高度】的百分比(1vw代表视窗【高度】的1%)vmin:当前 vw 和 vh 较小的一个值。vmax:当前 vw 和…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
