is和as是确保数据能够安全转换的。
先来说一下is,is用来判断某个对象是不是属于某一类型。具体使用看如下代码:
A a1 = new A(44);
object o =a1;
if (o is A)
{
A aa2 = (A)o;
Console.WriteLine(aa2.a);
}
if (o is int)
{
int i = (int)o;
Console.WriteLine(i);
}
判断o指向什么类型的对象,根据属于的类型进行操作。这个方法在对某些类型之间的转换不熟悉的时候,很有用,能避免出现异常。
再来说下as
as是先判断o是否指向某一类型的对象,如果是,就进行转换,把结果赋值给等号前面的引用。如果不是,就结束。前面的引用指向空。可以用如下代码试一下
A a1 = new A(44);
object o = a1;//验证int类型转换时的情况,就将a1换成一个数字,或者int类型变量
A a2 = o as A;
if (a2 != null)
{
Console.WriteLine(a2.a);
}
int? j = o as int?;//此处需要加?,表示j可以指向空值
if (j != null)
{
Console.WriteLine(j);
}