C# 提供 is 和 as 运算符来进行转换。可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。

is

is 运算符检查对象是否与给定类型兼容。

if(obj is Myobject)
{
	//确定对象obj是否为 MyObject 类型的一个实例,或者对象obj是否为从 MyObject 派生的一个类型
}

如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。

如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。

请注意,is 运算符只考虑引用转换、装箱转换和取消装箱(拆箱)转换。 不考虑其他转换,如用户定义的转换。

在 is 运算符的左侧不允许使用匿名方法。 lambda 表达式属于例外。

其他功能: 微软文档 is运算符

as

as 运算符用于在可兼容的引用类型或可以为null的值类型(nullable)之间执行类似于强制类型转换的操作。与强转不同的是,当转换失败时,as 运算符将返回NULL空,而不是引发异常。

请注意 as 运算符只执行引用转换、可空值类型(nullable) 转换和装箱转换。 as 运算符不能执行其他转换,如用户定义的转换。

可空值类型语法:T?	T为值类型
表示其基础值类型正常范围内的值,再加上一个 null 值。例 int? a=null;