C# Types
Types (C# Programming Guide) - Microsoft Docs
所有的 types 都继承自 System.Object:
- strings 是引用类型
- numbers 是 structs,是值类型
获取 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。