C# Types

Types (C# Programming Guide) - Microsoft Docs

所有的 types 都继承自 System.Object:

Built-In Types Table

获取 Type

var a = 3;
Console.WriteLine(a.GetType());  // System.Int32
Console.WriteLine(typeof(a));    // Error
Console.WriteLine(typeof(int));  // System.Int32

类型转换

隐式转换,不需要专门的语法,因为转换没有数据损失。比如 int 转为 long,SubClass 转为 BaseClass。

显示转换 (casts),需要使用 cast 操作符,转换可能有数据损失。比如 long 转为 int,BaseClass 转为 SubClass。

double x = 123;
int y = (int)x;

转换失败将抛出 InvalidCastException 异常。可以使用 is 或 as 操作符转换,避免抛出异常。is 返回 bool;

x is T // 若 x 是 T 的实例则返回 true, 否则返回 false
x as T //  Return x typed as T, or null if x is not a T
Console.WriteLine("abc" is int);

as 进行转换,若转换成功则返回转换之后的值,不然返回目标类型的默认值。as 只能用于 reference type 或 nullable type。