在什么情况下使用is,在什么情况下使用as.is与as的区别。

解决方案 »

  1.   

    is 是判断用的,翻译成“是不是”
    as 转换时候用的,翻译成“把它当作”
      

  2.   

    is用于判断类型是否相符:
    string a;
    那么(a is string)==true
    类似于a.getType()==typeof(string)as用于转换类型:
    float f;
    double d = f as double;
    类似于
    double d = (double)f;
      

  3.   


    //is用于判断类型是否相符: 
    int a,
    //可以用在判断语句中.
    if(a is int)
    {
      ;
    }//as用于转换类型: 
    object a=5;
    int b;
    b = ( a as int);
      

  4.   

    as还有一点最重要的。。当转换失败的时候不会引发异常而是转为NULL
      

  5.   

    不要错导别人啊
    as/is只对引用类型有效拿个值类型用is/as昏死!!!下面是MSDN上的:is 运算符用于检查对象的运行时类型是否与给定类型兼容,请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。is 运算符不考虑其他转换(如用户定义的转换)。示例
    // cs_keyword_is.cs
    // The is operator
    using System;
    class Class1 
    {
    }class Class2 
    {
    }public class IsTest 
    {
       public static void Test (object o) 
       {
          Class1 a;
          Class2 b;      if (o is Class1) 
          {
             Console.WriteLine ("o is Class1");
             a = (Class1)o;
             // do something with a
          }
          
          else if (o is Class2) 
          {
             Console.WriteLine ("o is Class2");
             b = (Class2)o;
             // do something with b
          }
          
          else 
          {
             Console.WriteLine ("o is neither Class1 nor Class2.");
          }
       }
       public static void Main() 
       {
          Class1 c1 = new Class1();
          Class2 c2 = new Class2();
          Test (c1);
          Test (c2);
          Test ("a string");
       }
    }
    输出
    o is Class1
    o is Class2
    o is neither Class1 nor Class2.
    as 运算符用于执行可兼容类型之间的转换。as 运算符用在以下形式的表达式中:as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将产生空,而不是引发异常。请注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来代替其执行。
    示例
    // cs_keyword_as.cs
    // The as operator
    using System;
    class MyClass1 
    {
    }class MyClass2 
    {
    }public class IsTest 
    {
       public static void Main() 
       {
          object [] myObjects = new object[6];
          myObjects[0] = new MyClass1();
          myObjects[1] = new MyClass2();
          myObjects[2] = "hello";
          myObjects[3] = 123;
          myObjects[4] = 123.4;
          myObjects[5] = null;      for (int i=0; i<myObjects.Length; ++i) 
          {
             string s = myObjects[i] as string;
             Console.Write ("{0}:", i);
             if (s != null)
                Console.WriteLine ( "'" + s + "'" );
             else
                Console.WriteLine ( "not a string" );
          }
       }
    }
    输出
    0:not a string
    1:not a string
    2:'hello'
    3:not a string
    4:not a string
    5:not a string
      

  6.   


    //不好意思,我前面的回贴,没仔细想,这样才对.
    class Program
        { 
            static void Main(string[] args)
            {
                object a = null;
                if (a is apple)
                {
                    ;
                }            apple b = new apple();
                a = (b as object);
            }    
        }    class apple
        {
            //构造函数
            public apple()
            {
            }
        }
      

  7.   

    as 和 强制类型转换是有区别的, 如果强制类型转换不了,它会throw exception.
    而as不会, 转换不了, 你得到的只是null而已.
      

  8.   

    int a = 0;
    object b = (a as object);
    int c = b as int;//error
      

  9.   

    通常用的还是as,因为is是会对性能产生影响的。具体看楼上的那些例子就知道。