寫程式時有時必須轉換類型進行操作,以下為 C# 類型轉換相關介紹:
as operator
- 
    
轉換時不會產生 exception,若無法轉換則回傳 null,使用後應判斷是否等於 null 的來檢查是否成功轉換。
 - 
    
只能轉換成 reference type class,原因為若轉換失敗回傳 null,但 value type 不能為 null,故 compiler 不會過。
 
範例 1:
private void button1_Click(object sender, EventArgs e)
{
    object s1 = "Iverson Hong";
    string s2 = s1 as string;
    if (s2 != null)
    {
        Console.WriteLine(s2);
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
    StringBuilder s3 = s1 as StringBuilder;
    if (s3 != null)
    {
        Console.WriteLine(s3);
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
}
結果:
Iverson Hong
Incompatible cast
範例 2:
class MyClass : MyBase, MyInterface
{
    public void MyInterfaceMethod()
    {
        Console.WriteLine("This is MyClass:MyInterfaceMethod()");
    }
}
class MyBase
{
    public virtual void MyBaseMethod()
    {
        Console.WriteLine("This is MyBase:MyBaseMethod()");
    }
}
interface MyInterface
{
    void MyInterfaceMethod();
}
private void button2_Click(object sender, EventArgs e)
{
    MyClass myClass = new MyClass();
    MyInterface myInterface = myClass as MyInterface;
    if (myInterface != null)
    {
        myInterface.MyInterfaceMethod();
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
    MyBase myBase = myClass as MyBase;
    if (myBase != null)
    {
        myBase.MyBaseMethod();
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
}
結果:
This is MyClass:MyInterfaceMethod()
This is MyBase:MyBaseMethod()
is operator
- 
    
不進行轉換,只是判斷是否可轉型,回傳 bool,不會產生 exception
 - 
    
常與強制轉型一起使用
 
範例 1:
private void button3_Click(object sender, EventArgs e)
{
    int myInt = 0;
    bool compatible = myInt is int;
    System.Console.WriteLine("myInt is int = " + compatible);
    compatible = myInt is long;
    System.Console.WriteLine("myInt is long = " + compatible);
    compatible = myInt is float;
    System.Console.WriteLine("myInt is float = " + compatible);
    compatible = myInt is object;
    System.Console.WriteLine("myInt is object = " + compatible);
}
結果:
myInt is int = True
myInt is long = False
myInt is float = False
myInt is object = True
範例 2:
private void button4_Click(object sender, EventArgs e)
{
    object s1 = "Iverson Hong";
    if (s1 is string)
    {
        string s2 = (string)s1;
        Console.WriteLine(s2);
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
    if (s1 is StringBuilder)
    {
        StringBuilder s3 = (StringBuilder)s1;
        Console.WriteLine(s3);
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
}
結果:
Iverson Hong
Incompatible cast
範例 3:
private void button5_Click(object sender, EventArgs e)
{
    MyClass myClass = new MyClass();
    if (myClass is MyInterface)
    {
        ((MyInterface)myClass).MyInterfaceMethod();
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
    if (myClass is MyBase)
    {
        ((MyBase)myClass).MyBaseMethod();
    }
    else
    {
        Console.WriteLine("Incompatible cast");
    }
}
結果:
This is MyClass:MyInterfaceMethod()
This is MyBase:MyBaseMethod()