c#入门之类型转换详解

“无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:无论什么类型的数据,在计算机存储时都是0和1,而变量的意义,就是以不同的方式来解释这些数据,以达到满足程序应用、节约内存等需求。

换句话说:变量存在的意义,就是建立规(标)范(准)的数据存储方式。

隐式转换

类型转换分两种形式:隐式转换、显示转换。

隐式转换不需要单独的表达式,只需要把满足隐式转换条件的两个变量做相应的表达式操作即可,但隐式转换的结果可能并不是自己意料之中的:

代码如下:

ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);

上面的输出结果,sourceVar的是a,而destinationVar虽然=sourceVar,但输出的结果是97。可以看出,虽然两种数据类型满足隐式转换的条件(存储的值范围),但不同的表达类型决定了最终的结果也不一样。另外,和大多数编程一样,隐式转换时,只要类型A的取值范围比类型B的范围小,就可以隐藏转换为B。

显示转换

在显示转换中,可以使用强制转换和Convert。

强制转换只在某些情况下可以,可能应用的场景不太丰富,当然,这个的确要方便一些,在变量前加上类似 (byte) 的代码就可以了:

代码如下:

byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);

这个例子比较有意思,输出的结果是:sourceVar: 281, destinationVar: 25; 为什么不是变更为255?这就回到开头提到的了,其实转换过程中,丢掉的是数据存储的二进制位:

在转换的过程中,会把超过取值范围(255二进制位)的那个1丢掉,保留其它的位,所以最终结果是25,而不是255,也不是281。

Convert转换应该是常用的方式,因为它始终会进行溢出检查。

溢出检查配置

有些东西虽然没什么用,但是我们应该知道,否则出问题的时候就不知道怎么解决了。配置:解决方案资源管理器 - 右键 - 属性 - 生成 - 高级 - 检查运算上溢/下溢:

当然,对于强制转换可能需要这个配置,但使用Convert转换时始终会进行溢出检查的,所以这个配置和checked/unchecked就不起作用了。

结语

每次一看见那些数据类型、表达式的列表表格就头疼,因为根本记不住。就像哪些类型可以怎么转换成其它的类型的表格一样,其实个人感觉大可不必去记住这些,在实际做项目的过程中,只要记得有这方面的功能就行了,具体用哪一个,可以再回过头来翻书或google。

应该掌握的是:记住存在隐式转换,但这种方式应该尽量少用吧。而显示转换,方便的就直接用(),当然,最可靠的应该是Convert,因为在转换时,Convert始终都会进行溢出检查。

(0)

相关推荐

  • C#用户定义类型转换详解

    C#用户定义类型转换 •用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然. C#提供隐式转换和显式转换 •隐式转换:编译器自动执行转换•显式转换:编译器只在使用显式转换运算符时才执行转换声明隐式转换的语法如下.注:所有用户定义转换必须使用public和static修饰符 复制代码 代码如下: public static implicit operator TargetType(SourceType Identifier){       ... 

  • C#自定义类型强制转换实例分析

    本文实例讲述了C#自定义类型强制转换的用法.分享给大家供大家参考.具体分析如下: 先来举一个小例子 类定义: public class MyCurrency { public uint Dollars; public ushort Cents; public MyCurrency(uint dollars, ushort cents) { this.Dollars = dollars; this.Cents = cents; } public override string ToString()

  • 浅析C#数据类型转换的几种形式

    1.Convert.ToInt32(); //转换成32位的整数.2.变量.ToString();/最常见的转换成 字符串.3."订单"+2514 //后面的数字会转换为字符串.4.((类名A)对象名X) //强行将 对象X 转换成 A类 的对象.5.int.Parse(string);把字符串型转换成其他类型.6.还有,如果要转换成的类型为引用类型,还可以用 as teacher tea = teahcer();如 student stu = tea as student; (1)

  • C#转换日期类型实例

    本文实例讲述了C#转换日期类型的方法.分享给大家供大家参考.具体分析如下: 如:将日期1999-5-31 11:20转换成 /Date(928120800000+0800)/ 其中928120800000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTime中间间隔的毫秒数. 0800代表的是时区,(0800代表就是中国地区) 具体代码如下: 复制代码 代码如下: public long MilliTimeStamp(DateTime TheDate) { DateTi

  • C#将布尔类型转换成字节数组的方法

    本文实例讲述了C#将布尔类型转换成字节数组的方法.分享给大家供大家参考.具体如下: byte[] b = null; b = BitConverter.GetBytes(true); Console.WriteLine(BitConverter.ToString(b)); 希望本文所述对大家的C#程序设计有所帮助.

  • C#引用类型转换的常见方式总结

    本文以实例形式简单讲述了引用类型转换的几种常见方式,如:子类转换成父类,父类转换成子类,以及不是子父级关系类之间的转换.现分述如下,供大家参考: 一.隐式转换:子类转换成父类 public class Animal { public int _age; public Animal(int age) { this._age = age; } } public class Dog : Animal { public float _weight; public Dog(float weight, in

  • c#之用户定义的数据类型转换介绍

    c# 允许用户进行两种定义的数据类型转换,显式和隐式,显式要求在代码中显式的标记转换,其方法是在圆括号中写入目标数据类型. 对于预定义的数据类型,当数据类型转换时可能失败或丢失某些数据,需要显式转换, 1 把int数值转换成short时,因为short可能不够大,不能包含转换的数值. 2 把有符号的数据转换为无符号的数据,如果有符号的变量包含一个负值,会得到不正确的结果. 3 把浮点数转换为整数数据类型时,数字的小数部分会丢失. 此时应在代码中进行显式数据类型,告诉边起义你知道这会有丢失数据的危

  • C#基础之数据类型转换

    int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x); 输出结果: 我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807:int类型的是:-2147483648~+2147483647 上面的代码中,由于long变量的值超过了int能容纳的最大值,造成了数据的丢失:像这样有可能造成数据丢失或引发异常的任何转换都需要执行显式转换(explicit); 相反的就

  • c# 类型转换

    CLR允许将一个对象转换为它的实际类型,或者它的基类型. 在C#中,可将一个对象隐式转换为它的基类型,将对象转换成派生类型需要显示转换.例: object o = new Emplee(); Emplee e = (Emplee)o; 但是如果将一个对象转换成自己的派生类型是,会运行时报错: object o = new object(); Emplee e = (Emplee)o; 所以CLR是类型安全的. c#中is as的操作符用法 在c#语言中,进行类型转换的另一个方式是使用is as操

  • c#入门之类型转换详解

    "无论是什么类型,所有的数据都是一系列的位,即一系列0和1.变量的含义是通过解释这些数据的方式来传达的."--这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:无论什么类型的数据,在计算机存储时都是0和1,而变量的意义,就是以不同的方式来解释这些数据,以达到满足程序应用.节约内存等需求. 换句话说:变量存在的意义,就是建立规(标)范(准)的数据存储方式. 隐式转换 类型转换分两种形式:隐式转换.显示转换. 隐式转换不需要单独的表达式,只需要把满足

  • JAVA中string数据类型转换详解

    在JAVA中string是final类,提供字符串不可以修改,string类型在项目中经常使用,下面给大家介绍比较常用的string数据类型转换: String数据类型转换成long.int.double.float.boolean.char等七种数据类型 复制代码 代码如下: * 数据类型转换 * @author Administrator * */ public class 数据类型转换 { public static void main(String[] args) { String c=

  • 基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在画布中创建一个绘图区.在绘图区上画几条线.给图像添加文字说明等.下面我们就通过实例代码来领略一下他的魅力. import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() 上图是我们通

  • 有关C++继承与友元、继承与类型转换详解

    实例如下: #include <iostream> using namespace std; class a{ friend class pal; private: int i; protected: int j; public: int k; }; class b:public a{ protected: int l; }; class c:protected a{}; class d:private a{}; class e:public b{}; class pal{ public: v

  • JavaScript显式数据类型转换详解

    基本概念 将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串.数字和布尔值,不会返回引用类型值. 类型转换分为"显式"和"隐式":"显式"转换发生在静态类型语言的编译阶段,而"隐式"转换则发生在动态类型语言的运行时. 显式类型转换 非字符串到字符串的类型转换 toString() 方法 数字.布尔值.字符串和对象都有 toString() 方法,但 null 和 undefined 没有. 例子:

  • springboot整合websocket最基础入门使用教程详解

    项目最终的文件结构 1 添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <

  • JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)

    Apache Arrow是是各种大数据工具(包括BigQuery)使用的一种流行格式,它是平面和分层数据的存储格式.它是一种加快应用程序内存密集型. 数据处理和数据科学领域中的常用库: Apache Arrow.诸如Apache Parquet,Apache Spark,pandas之类的开放源代码项目以及许多商业或封闭源代码服务都使用Arrow.它提供以下功能: 内存计算 标准化的柱状存储格式 一个IPC和RPC框架,分别用于进程和节点之间的数据交换 让我们看一看在Arrow出现之前事物是如何

  • Java之int和string类型转换详解

    int.String的类型转换 int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf(i); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s

  • C/C++中数据类型转换详解及其作用介绍

    目录 概述 不同类型数据间的转换 隐式类型转换 强制类型转换 自己声明的类型转换 转换构造函数 类型转换函数 案例 应用 概述 在日常的开发中, 我们经常会用到数据类型转换, 所以我们要对数据类型转换有一定的了解. 不同类型数据间的转换 在 C++ 中, 某些标准类型的数据之间可以自动转换. 隐式类型转换 隐式类型转换: 由 C++ 编译系统自动完成的, 我们无需干预. 例如: int main() { int a = 6; a = a + 3.5; cout << a << en

  • C++ 强制类型转换详解

    目录 一.C强制转换 二.C++强制转换 1.static_cast 静态转换(编译时检查) 2.const_cast 常量转换 3.reinterpret_cast 重新解释转换 4.dynamic_cast 动态转换(运行时检查) 三.要点总结 一.C强制转换 C语言中的强制转换主要用于普通数据类型.指针的强制转换,没有类型检查,转换不安全, 语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2(基本已经不用了) 二.C++强制

随机推荐