1.
is: 判断对象是否与给定类型兼容,返回true 或 false,如果对象为null, 则永远返回false,注:is 不做类型的转换, is只考虑引用转换、装箱转换和取消装箱转换
as:在兼容的引用类型间执行转换,类似于强制转换,若类型不兼容,则返回null,注意:as 运算符只执行引用转换和装箱转换
2.
如果有
int a=1;
object b=a;
int c=b as int;
那么在编译的时候就会出现编译错误:“错误 as 运算符必须与引用类型一起使用(“int”是值类型) ”,即 执行了as拆箱操作
但是,对于is来说上面的情形是可以了,因为is允许不仅考虑as 所考虑的,它也考虑取消装箱转换,如下:
int a=1;
object b=a;
bool c=b is int;
Console.WriteLine(c);
这段代码能成功执行
3.demo代码:
is:
class A
{
}
class B
{
}
static void Main(string[] args)
{
A a = new A();
B b = new B();
Test(b);
Test(a);
Test("a");
}
static void Test(object o)
{
A a;
B b;
if (o is A)
{
Console.WriteLine("o is A");
a = (A)o;
}
else if (o is B)
{
Console.WriteLine("o is B");
b = (B)o;
}
else
{
Console.WriteLine("neither A nor B");
}
}
}
as:
class A
{
}
class B
{
}
static void Main(string[] args)
{
object[] arr = new object[5];
arr[0] = a;
arr[1] = b;
arr[2] = 1;
arr[3] = "Aa";
arr[4] = null;
for (int i = 0; i < arr.Length; i++)
{
A aa = arr[i] as A;
B bb = arr[i] as B;
if (aa != null)
{
Console.WriteLine("elements is A whose index is " + i.ToString());
}
else if (bb != null)
{
Console.WriteLine("elements is B whose index is " + i.ToString());
}
else
{
Console.WriteLine("element is neither A nor B whose index is " + i.ToString());
}
}
}
is: 判断对象是否与给定类型兼容,返回true 或 false,如果对象为null, 则永远返回false,注:is 不做类型的转换, is只考虑引用转换、装箱转换和取消装箱转换
as:在兼容的引用类型间执行转换,类似于强制转换,若类型不兼容,则返回null,注意:as 运算符只执行引用转换和装箱转换
2.
如果有
int a=1;
object b=a;
int c=b as int;
那么在编译的时候就会出现编译错误:“错误 as 运算符必须与引用类型一起使用(“int”是值类型) ”,即 执行了as拆箱操作
但是,对于is来说上面的情形是可以了,因为is允许不仅考虑as 所考虑的,它也考虑取消装箱转换,如下:
int a=1;
object b=a;
bool c=b is int;
Console.WriteLine(c);
这段代码能成功执行
3.demo代码:
is:
class A
{
}
class B
{
}
static void Main(string[] args)
{
A a = new A();
B b = new B();
Test(b);
Test(a);
Test("a");
}
static void Test(object o)
{
A a;
B b;
if (o is A)
{
Console.WriteLine("o is A");
a = (A)o;
}
else if (o is B)
{
Console.WriteLine("o is B");
b = (B)o;
}
else
{
Console.WriteLine("neither A nor B");
}
}
}
as:
class A
{
}
class B
{
}
static void Main(string[] args)
{
object[] arr = new object[5];
arr[0] = a;
arr[1] = b;
arr[2] = 1;
arr[3] = "Aa";
arr[4] = null;
for (int i = 0; i < arr.Length; i++)
{
A aa = arr[i] as A;
B bb = arr[i] as B;
if (aa != null)
{
Console.WriteLine("elements is A whose index is " + i.ToString());
}
else if (bb != null)
{
Console.WriteLine("elements is B whose index is " + i.ToString());
}
else
{
Console.WriteLine("element is neither A nor B whose index is " + i.ToString());
}
}
}