一个可以让你节省10行代码的C#类型转换语法as

今天来聊聊C#关键字as,这是我最喜欢的C#语法之一了。

01 as简介

as运算符类似于强制类型转换功能,但是它的好处就是,如果转换失败不会引发异常,而是返回null。.

02 使用方法

示例代码:
object[] array = new object[] { 1, "two", 3.3 };
 // i的值为1  int? i = array[0] as int?;
// s的值为"two"  string s = array[1] as string; 
// j的值为null,因为3.3不能转换为int,但不会引发异常int? j = array[2] as int?;

as写法与传统写法对比,代码更加简洁、易懂:

object[] array = new object[] {3};
//as写法,代码简单易懂int? num1 = array[0] as int?;if (num1 != null){    Console.WriteLine(num1); //输出 3}
//传统写法,代码冗长int? num2 = null;try{    num2 = (int?)array[0];}catch{    num2 = null;}if (num2 != null){    Console.WriteLine(num2);  //输出 3}

03 as使用注意事项

as运算符支持引用类型和可为null的值类型,但是对于不同值类型的转换,应该使用强制类型转换或者转型方法。

比如以下代码将字符串转为int、double转换为int:

// 编译错误:不能将字符串转换为整数string s = "11";  int? i = s as int?; 
//以下转换没有意义,d2永远为nulldouble d1 = 1.1;int? d2 = d1 as int?;

//正确方法int j = int.Parse(s);int k = Convert.ToInt32(s);int d3 = (int)d1;