C#中 is 和 as 的区别

一, is 检查对象是否与给定的类型兼容

  @1 检查对象是否是一个实例,或者从父类那儿继承来的

       if(students is Person)

   {

         ...//code 

   }

      @2 is 运算符只考虑装箱,拆箱,以及引用转换;

      @3 在is运算符的左侧不允许使用匿名方法.(lambda表达式除外)

   ex: 

 View Code
 1             int a = 10;
 2             object obj = a;
 3             if(obj is int)
 4             {
 5                 Console.WriteLine("boxing...");
 6             }
 7             a = 20;
 8             Console.WriteLine("a={0}",a);
 9             Console.WriteLine("obj={0}",obj);
10 
11 
12 //输出结果:
13   boxing...
14   a=20
15   obj=10

二. as 运算符用于执行可兼容类型之间的转换

  @1 as 运算符类似于类型转换,不同的是,as运算符转换失败了不会报错,而是返回一个null;

      @2 as 运算符只执行引用赚换和装箱转换.as 运算符无法执行用定义的转换;

View Code
 1             object[] obj=new object[5];
 2             obj[0] = new MyClass();
 3             obj[1] = "hello";
 4             obj[2] = 123;
 5             obj[3] = null;
 6             obj[4] = 'a';
 7             for (int i = 0; i < obj.Length; i++)
 8             {
 9                 string s = obj[i] as string;
10                 if(s!=null)
11                 {
12                     Console.WriteLine(s);
13                 }
14                 else
15                 {
16                     Console.WriteLine("not string ...");
17                 }
18             }
原文地址:https://www.cnblogs.com/ry123/p/2671304.html