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

Posted chengjunde

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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() 的一种特殊情况。

以上是关于C#中的强制类型转换与as转换的区别的主要内容,如果未能解决你的问题,请参考以下文章

C#中的类型转换

在C#中如何将int类型强制转换为double类型

C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()

C#如何把INT类型转换为方法参数对应的枚举类型?怎么强制转换?

多用as少用强制类型转换

C#中怎么将string转换成int型