跳转至内容

C# 编程/类型转换

来自 Wikibooks,开放世界中的开放书籍

类型转换

[编辑 | 编辑源代码]

类型转换是将值从一种类型转换为另一种类型的方式。主要存在两种类型的转换,隐式转换和显式转换。当值类型转换为对象或引用类型时,会发生装箱。

隐式转换

[编辑 | 编辑源代码]

隐式转换是编译器自动执行值转换的方式。当且仅当不会发生信息丢失时才会发生这种情况。例如,将数据从较小的整数类型转换为较大的类型,或将派生类型转换为基类型。

int iValue = 5000;

double dDistance = iValue ;

public class Animal { [] };

public class Mammal : Animal { [] };

public class Cat : Mammal
{
    […]
}

Mammal mammal = new Cat();

此外,此示例也可以工作。

int num = 9513458219;
long bigNum = num;

显式转换

[编辑 | 编辑源代码]

这种类型的转换必须由开发人员指定,因为可能会丢失数据。

double dPi = 3.1415926535;

int iValue = (int)dPi;   // iValue = 3
int iValue_2 = Convert.ToInt32(dPi);   // iValue_2 = 3
double dPi = 3.1415926535;

object oPi = (object) dPi;

最佳实践

[编辑 | 编辑源代码]

对于引用类型,除非已知对象永远不会引发异常,否则不建议使用直接转换。一种常见的最佳实践是使用 as 关键字。

///<summary>
/// Function attempts to cast object to cat.  
/// If object cannot be cast to cat, returns null 
///</summary>
public Cat ConvertToCat(object obj)
{
   Cat c = obj as Cat;
   return c;
}

!重要:仅当您在转换后进行空值检查并处理异常情况时,使用“as”关键字才是最佳实践。在其他情况下,最好使用显式转换,然后调试 NullReferenceException

参考文献

[编辑 | 编辑源代码]
华夏公益教科书