使用 C# 的 "as" 關鍵字
自己在C#語言關於使用轉型(cast)的記憶中,常常都很直覺的就會使用
強迫轉型方式來處理。就以 Person 的類別來舉例:
強迫轉型方式來處理。就以 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型別嗎?這可能是自己的一廂情願吧!
會直接就用 (Person)去強迫轉型,原因是因為自己認為 obj 一定是屬於
Person型別,才會有如此的寫法。但是,真的能保證 obj 一定是屬於
Person型別嗎?這可能是自己的一廂情願吧!
當 obj 並非屬於 Person 型別時,系統就會丟出 InvalidCastException
的錯誤訊息。
的錯誤訊息。
為了避免轉型錯誤的發生,可以使用 "as" 這關鍵字。他會先去幫你作轉型
的動作,如果成功,自然就會回傳轉型成功後的物件型別;如果失敗,則會
回傳 null。所以,當使用了 "as" 關鍵字後,在透過判斷回傳值是否為 null
來完成型別轉換工作。
的動作,如果成功,自然就會回傳轉型成功後的物件型別;如果失敗,則會
回傳 null。所以,當使用了 "as" 關鍵字後,在透過判斷回傳值是否為 null
來完成型別轉換工作。
而上述的程式,修正如下:
public override bool Equals(object obj)
{
Person p = obj as Person;
{
Person p = obj as Person;
if (p==null) return false;
return p.Name == this.Name && p.ID == this.ID;
}
}
沒有留言:
張貼留言