C#中的强制类型转换与as转换的区别

C#中的强制类型转换

例如有ClassA与ClassB两个类
创建两个类的对象进行转换


1

2

ClassA a = new ClassA();

 ClassB b = new ClassB();

如果使用强制转换


1

ClassB c = (ClassB)a;

会报InvalidCastException异常 无法将类型为ClassA的对象强制转换为类型ClassB

若使用as关键字进行转换则


1

2

3

4

5

ClassB c=a as ClassB;

 if(c!=null)

 {

 MessageBox.Show(c.ToString());

 }

如果a和ClassB不兼容,则返回null给c

在C#中,我们可以看到三种强制类型转换,比如强制转换成有符号32位整型,可以找到下面三种方式:

① (int)()                ②Convert.ToInt32()         ③int.Parse()

三种转变在有些数据时可以通用,但是用法上仍然有很大的区别

(int)表示使用显式强制转换,是一种类型转换。当我们从 int 类型到 long、float、double 或decimal 类型,可以使用隐式转换,但是当我们从 long 类型到 int  类型转换就需要使用显式强制转换,否则会产生编译错误。

Convert.ToInt32() 则可以将多种类型(包括 object  引用类型)的值转换为 int  类型,因为它有许多重载版本[2]:
    public static int ToInt32(object);
    public static int ToInt32(bool);
    public static int ToInt32(byte);
    public static int ToInt32(char);
    public static int ToInt32(decimal);
    public static int ToInt32(double);
    public static int ToInt32(short);
    public static int ToInt32(long);
    public static int ToInt32(sbyte);
    public static int ToInt32(string);

Int32.Parse()表示将包含数字的字符串转换为32 位有符号整数,属于内容转换

我们一种常见的方法:public static int Parse(string)。
    如果 string 为空,则抛出 ArgumentNullException 异常;
    如果 string 格式不正确,则抛出 FormatException 异常;
    如果 string 的值小于 MinValue 或大于 MaxValue 的数字,则抛出 OverflowException 异常。
 可以看出来,Convert.ToInt32() 的功能是最强大的,它把Int32.Parse()功能包括了,也是说是Int32.Parse()Convert.ToInt32() 的一种特殊情况。

时间: 2024-10-11 08:42:06

C#中的强制类型转换与as转换的区别的相关文章

详细理解javascript中的强制类型转换

将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时? 1.如果是静态语言,比如c等,所有的类型转换应该都是在编译阶段处理的吧? 2.如果是动态语言,如js等, 编译阶段会处理类型转换吗? 一.ToString 它负责处理非字符串到字符串的强制类型转换 数字的字符串化遵循通用规则

Java中如何使用非强制类型转换把字符串转换成int类型

①强制类型转换代码如下: String string = "123456"; int a,b = 0; @Test public void String2Int1() { //方法1 try { a = Integer.parseInt(string); } catch (Exception e) { e.printStackTrace(); } //方法2 try { b = Integer.valueOf(string).intValue(); } catch (Exception

慕课网-安卓工程师初养成-2-10 Java中的强制类型转换

来源:http://www.imooc.com/code/1241 相信小伙伴们也发现了,尽管自动类型转换是很方便的,但并不能满足所有的编程需要. 例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来实现了. 语法:( 数据类型 ) 数值 运行结果:  可以看到,通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍

赋值中的强制类型转换

赋值中的类型转换 当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型.具体的转换如下: (1) 浮点型与整型 ● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分(是直接舍弃,编译器不会自动四舍五入), 只保留整数部分.将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0.注意:赋值时的类型转换实际上是强制的. (2) 单.双精度浮点型 ● 由于C语言中的浮点值总是用双精度表示的,所以floa

Java中的强制类型转换

例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来实现了. public class HelloWorld{ public static void main(String[] args) { double heightAvg1=176.2; int heightAvg2=(int)heightAvg1; System.out.println(hei

JS中的强制类型转换

<script type="text/javascript">   /*    * 强制类型转换    * 指的是将一个数据类型强制转换为其他的数据类型    * 类型转换主要指,将其他的数据类型,转换为String,Number,Boolean    *     */      /*    * 将其他的数据类型转换为String    * 方式一:    * 调用被转换数据类型的tostring()方法    * 该方法不会影响原变量,它会将转换的结果返回    * 但是

Qt中的强制类型转换

在C++开发中经常要进行数据类型的强制转换. 刚开始学习的时候,直接对基本数据类型强制类型转换,如float fnum = 3.14; int num = (int)fnum; 随着C++标准的发展,又提供了dynamic_cast.const_cast .static_cast.reinterpret_cast等高级安全的强制转换方法. dynamic_cast: 通常在基类和派生类之间转换时使用,run-time cast.const_cast: 主要针对const和volatile的转换.

JS在if中的强制类型转换

这个属于很基础了,但是却很有用,需要的补个坑吧: JS在很多情况下会进行强制类型转换,其中,最常见两种是: 1.使用非严格相等进行比较,对==左边的值进行类型转换: 2.在if判断时,括号内的值进行类型转换,转化为布尔值: 强制转换为false的四种情况 在if中进行强制转换为false的情况只有四种,分别是: 1.数字0 2.NaN 3.空字符串 4.null或undefined But:这里存在2中特殊情况,数组和对象(因为,在上述条件下恒为true),改如何判断呢? 其实也简单:前者arr

SQL SERVER中强制类型转换cast和convert的区别

在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. 1 select CAST('123' as int) -- 123 2 select CONVERT(int, '123') -- 123 3 4 select CAST(123.4 as int) -- 123 5 select CONVERT(int, 123.4) -- 123 6 7 select CAST('1