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

使用DDD从零构建一个完整的系统

今天来聊聊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永远为null
double d1 = 1.1;
int? d2 = d1 as int?;


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

- End -

推荐阅读

推荐一个.Net分布式微服务开发框架

一个基于.Net开发的Windows截屏录制工具

程序员修炼内功:10篇文章汇总

基于.NetCore开发,前端支持Layui、React、Vue且前后端分离的快速开发框架

一款统计摸鱼时长的开源项目

你可能感兴趣的:(c#,开发语言)