C#的隐式和显示类型转换

    关于隐式转换和显示转换,每种语言都有的,c#中当然也不例外。一般常用到的场合,一种是写运算表达式的时候,要保持整体的数据类型一致和计算准确,比如有一个变量a是int型,但是它是通过加减乘除得到的,那么在运算中就要考虑用显示转换,除的运算需要转换成float或double,再把结果强制转换为int;再一个就是传参数的时候,需要注意哪些需要显示转换,或者对集合赋值的时候也要注意类型的问题。
1. 隐式类型转换
所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型。有如下几种:
从sbyte类型到short,int,long,float,double,或decimal类型。

从byte类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型。

从short类型到int,long,float,double,或decimal类型。

从ushort类型到int,uint,long,ulong,float,double,或decimal类型。

从int类型到long,float,double,或decimal类型。

从uint类型到long,ulong,float,double,或decimal类型。

从long类型到float,double,或decimal类型。

从ulong类型到float,double,或decimal类型。

从char类型到ushort,int,uint,long,ulong,float,double,或decimal类型。

从float类型到double类型。

2.显式类型转换

显式类型转换,即强制类型转换。与隐式转换相反,而且强制转换会造成数据丢失。

从sbyte到byte,ushort,uint,ulong,或char。

从byte到sbyte或char。

从short到sbyte,byte,ushort,uint,ulong,或char。

从ushort到sbyte,byte,short,或char。

从int到sbyte,byte,short,ushort,uint,ulong,或char。

从uint到sbyte,byte,short,ushort,int,或char。

从long到sbyte,byte,short,ushort,int,uint,ulong,或char。

从ulong到sbyte,byte,short,ushort,int,uint,long,或char。

从char到sbyte,byte,或short。

从float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。

从double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。

从decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。

当转换有丢失信息或导致异常抛出,转换按照下列规则进行:

对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个OverflowException异常。这种检测还与编译器中是否设定了checked选项有关。

对于从float,double,或decimal到整型的转换,源变量的值通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个OverflowException异常。

对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正
无穷或负无穷。如果原double值是Nan,则转换结果也是NaN。

对于从float或double到decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位(如果有必要的话)。如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷和NaN,则将抛出InvalidCastException异常。

对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。

 

 以上就是C#的隐式和显示类型转换的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:18:06
下一篇 2025年12月12日 06:41:39

相关推荐

  • C#基础知识整理:C#类和结构(1)

    1、结构功能特性? 实现代码?结构用struct关键字定义的,与类类似,但有本质区别。结构实质是一个值类型,它不需要对分配的。结构的特性:(1)、结构作为参数传递时,是值传递。(2)、结构的构造函数必须带参数的。(3)、结构实例化可以不用new的。(4)、结构不能继承,但是可以实现接口。(5)、结构…

    好文分享 2025年12月17日
    000
  • C#基础知识整理:C#类和结构(2)

      1、什么是构造函数? 有哪些构造函数? 各个构造函数的定义、实现方法、注意事项?所谓构造函数,就是一个方法,这个方法可以初始化对象,即运行完这个函数后,内存总开辟了一块该类的对象的空间。有三种:正常的构造函数,也就是实例化构造函数;私有构造函数;静态构造函数。实例化构造器: public cla…

    2025年12月17日
    000
  • C#中使用gRPC

    由于有nuget,使得c#在配置项目时非常简单。 1. 在NuGet中添加ProtocolBuffer和gRPC引用 protocol buffer 3.0版本,在NuGet插件界面选择Include Prerelease,查找google protocol buffer。如果不选择include …

    好文分享 2025年12月17日
    000
  • C#理解泛型

    简介 Visual C# 2.0 的一个最受期待的(或许也是最让人畏惧)的一个特性就是对于泛型的支持。这篇文章将告诉你泛型用来解决什么样的问题,以及如何使用它们来提高你的代码质量,还有你不必恐惧泛型的原因。 泛型是什么? 很多人觉得泛型很难理解。我相信这是因为他们通常在了解泛型是用来解决什么问题之前…

    好文分享 2025年12月17日
    000
  • C#基础之yield与Singleton

    1.实例解析yiled的作用 最近参加java笔试题第一次见到yield这个关键字,既然遇见了那肯定要掌握,下面是c#中关于yield关键字的总结。yield这个关键字作用于迭代器块中,其最本质的功能有2个:一是“依次”向枚举对象提供值,二是发出迭代结束信号。这两个功能对应的语句分别是yield r…

    2025年12月17日
    000
  • C# 继承

    继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基…

    好文分享 2025年12月17日
    000
  • C# 多线程经典示例 吃苹果

    本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。 示例概述:   下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法。要求开发一个程序实现如下情况:一个家庭有三个孩子,爸爸妈妈不断削苹果往盘子里面放,老大、老二、老三不断从盘子里面取苹果吃。盘子的大小有限,最多只能放5个苹…

    2025年12月17日
    000
  • C#希尔排序

    c#希尔排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class ShellSorter { public static int[] …

    2025年12月17日 好文分享
    000
  • C# 选择排序

    c# 选择排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class SelectSorter { public static int[…

    2025年12月17日
    000
  • C#编程中的泛型

    .net 1.1版本最受诟病的一个缺陷就是没有提供对泛型的支持。通过使用泛型,我们可以极大地提高代码的重用度,同时还可以获得强类型的支持,避免了隐式的装箱、拆箱,在一定程度上提升了应用程序的性能。本文将系统地为大家讨论泛型,我们先从理解泛型开始。 1.1 理解泛型 1.1.1 为什么要有泛型? 我想…

    好文分享 2025年12月17日
    000
  • C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到。 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它父类有非常紧密的依赖…

    好文分享 2025年12月17日
    000
  • C#基础回顾Async 的返回类型

    序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈。 异步方法具有三个可能的返回类型:Task、Task 和 void。  什么时候需要使用哪一种返回类型,具体情况需要具体分析。如果使用不当,程序的执行结果也许并不是你想要的,下面我们就来…

    好文分享 2025年12月17日
    000
  • C#开发之winform(公共控件)

    一、客户端设计思路 1.理顺设计思路,架构框架 2.设计界面 3.编写后台代码 4.数据库访问 二、公共控件 1、Button(按钮):        ⑴ Enabled :确定是否启用控件        ⑵ Visible:确定控件是否课件; 2、CheckBox(多选项) 、CheckListB…

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(三):类

    是抽象的概念。   例如Dog类描述了狗有的一些特性,体重、身高、年龄、以及吼叫等等。 public class Dog  {  string dogBreed;//犬种  int weight; //体重  int height; //升高  int age; //年龄  public void …

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(四):继承

    方法重写:     基类方法标识virtual关键字,子类(继承类)中方法重写标识override关键字。     重写的方法必须跟基类的类型相同,如方法名称、返回和接受参数。 public class Class1 { public virtual void show(int i) {……} } …

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(五):抽象类&接口

    抽象类abstract: 抽象类和抽象方法可以用abstract关键字进行标识。就是没有完全定义的类或方法。所以不能直接实例化操作。 就因为他没完全定义所以不能用sealed关键字进行密封。 抽象方法不含程序主体: public abstract class Student { //抽象方法,不含程…

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(六):数组

    数组: Int [] intArray = new int[6];Int [][] intArray = new int[2][];Int [][][] intArray = new int[2][][];intArray[1][2][1] = 3;Int [ , ] myTable = new i…

    好文分享 2025年12月17日
    000
  • C#进阶系列——AOP?AOP!

    前言:这篇打算写写aop,说起aop,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于aop的,比如mvc的过滤器filter,它里面的异常捕捉可以通过filterattribute,iexceptionfilter去处理,这两个对象的处理机制内部原理应该就是aop…

    2025年12月17日 好文分享
    000
  • C#中CLR(公共语言运行时)与IL(中间代码)

    .net平台中的CLR 首先要说明的是,.net平台与c#不是一回事 它是c#,vb.net等程序运行的平台。 CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理、线程管理和异常处理等服务,而且还负责对代码实施严格的类型安全检查,保证了代码的正确性。 事实上,类…

    2025年12月17日
    000
  • C#基础系列:Linq to Xml读写xml

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写。之前做的一个项目有一个很变态的需求:c#项目调用不知道是什么语言写的一个webservice,然后添加服务引用总是失败,通过代理的方式动态…

    好文分享 2025年12月17日
    000

发表回复

登录后才能评论
关注微信