(1)is的用法:
检查对象是否与给定类型兼容。例如,以下代码可以确定对象是否与 string 类型兼容:
if (obj is string)
{
}
 
如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。
如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在运行时才计算类型兼容性。也就是说is的返回类型是bool类型的。
不能重载 is 运算符。
请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。
在 is 运算符的左侧不允许使用匿名方法。lambda 表达式属于例外。
示例
// cs_keyword_is.cs
// The is operator.
using System;
class Class1
{
}
class Class2
{
}
class IsTest
{
    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.");
        }
    }
    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.
(2)as的用法
as 运算符用于在兼容的引用类型之间执行转换。它必须用于引用类型,例如:
string s = someObject as string;
if (s != null)
{
    // someObject is a string.
}
 
as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而非引发异常。请看下面的表达式:
expression as type
 
它等效于以下表达式,但只计算一次 expression。
expression is type ? (type)expression : (type)null
 
注意,as 运算符只执行引用转换和装箱转换。也就是说只有继承关系才能转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用强制转换表达式来执行。
// cs_keyword_as.cs
// The as operator.
using System;
class Class1
{
}
class Class2
{
}
class MainClass
{
    static void Main()
    {
        object[] objArray = new object[6];
        objArray[0] = new Class1();
        objArray[1] = new Class2();
        objArray[2] = "hello";
        objArray[3] = 123;
        objArray[4] = 123.4;
        objArray[5] = null;
        for (int i = 0; i < objArray.Length; ++i)
        {
            string s = objArray[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