2009年9月21日 星期一

使用 C# 的 "as" 關鍵字

使用 C# 的 "as"  關鍵字

 

自己在C#語言關於使用轉型(cast)的記憶中,常常都很直覺的就會使用
強迫轉型方式來處理。就以 Person 的類別來舉例:

 


    class Person
    {
        public string Name = string.Empty;
        public string ID = string.Empty;


        public Person(string _name,string _id)
        {
            Name = _name;
            ID = _id;
        }


        public override bool Equals(object obj)
        {
            Person p = (Person)obj;
            return p.Name == this.Name && p.ID == this.ID;
        }



    }


 

Person p =(Person) obj;
會直接就用 (Person)去強迫轉型,原因是因為自己認為 obj 一定是屬於
Person型別,才會有如此的寫法。但是,真的能保證 obj 一定是屬於
Person型別嗎?這可能是自己的一廂情願吧!

當 obj 並非屬於 Person 型別時,系統就會丟出 InvalidCastException
的錯誤訊息。

為了避免轉型錯誤的發生,可以使用 "as" 這關鍵字。他會先去幫你作轉型
的動作,如果成功,自然就會回傳轉型成功後的物件型別;如果失敗,則會
回傳 null。所以,當使用了 "as" 關鍵字後,在透過判斷回傳值是否為 null
來完成型別轉換工作。

而上述的程式,修正如下:

 

        public override bool Equals(object obj)
        {
            Person p = obj as Person;

            if (p==null) return false;

            return p.Name == this.Name && p.ID == this.ID;
        }

 


 

 

沒有留言:

張貼留言