[英]Object Casting in C#
有什么區別以及優缺點
LinkButton lb = (LinkButton)ctl;
和
LinkButton lb = ctl as LinkButton;
我嘗試使用第一個,但它給了我錯誤,然后我用關鍵字 as 嘗試了另一個,它工作得很好。
先感謝您。
第一個是顯式轉換,第二個是轉換。 如果as
關鍵字的轉換失敗,它將簡單地返回null
而不是拋出異常。
這是每個的文檔:
請注意,在上面的鏈接文檔中,他們聲明as
關鍵字不支持用戶定義的轉換。 +1 到 Zxpro :) 這就是用戶定義的轉換:
我對使用as
運算符與直接強制轉換的通常指導如下:
as
運算符。 以上適用於引用類型。 對於值類型(如bool
或int
), as
不起作用。 在這種情況下,您需要使用is
檢查來執行“安全轉換”,如下所示:
if (x is int y)
{
// y is now a int, with the correct value
}
else
{
// ...
}
我不建議嘗試捕獲InvalidCastException
,因為這通常是程序員錯誤的標志。 請改用上述指南。
我相信,如果使用第一種方法無法正確轉換對象(嘗試轉換錯誤類型),則使用第一種方法進行轉換會引發異常,而如果無法正確轉換,則使用 as 關鍵字只會將變量設置為 null。
因此,請確保如果您使用 as 關鍵字強制轉換,請檢查
if(lb == null)
return null; // or throw new Exception()
如果你使用 () 演員表,你用
try
{
LinkButton lb = (LinkButton)ctl;
}
catch(InvalidCastException ex)
{
//TODO: Handle Exception
}
第二個稱為安全轉換,它不會拋出異常,而是將“null”放入您的變量中。 所以它不能正常工作,但將您的LinkButton lb
為 null
請參閱 本自@喬恩飛碟雙向: 什么是投語法和使用作為運營商之間的區別?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.