2016-04-16 13 views
-3

如果我嘗試使用「as」關鍵字來生成空值,它會給我帶來運行時錯誤。爲什麼「as」關鍵字與類不起作用,除非在數組中?

Base x = new AClass() as Base; 

但是,如果我製作一個數組並執行它,錯誤不會發生。它按預期給我提供空值。

 I1[] array = new I1[1]; 
     array[0] = new AClass(); 

     for (int i = 0; i < array.Length; i++) 
     { 
      //Works 
      Base x = array[0] as Base; 

爲什麼會這樣呢?數組[0] =新的AClass()。沒有數組有什麼問題?

+0

爲什麼不這樣做:基數X =空? – argaz

+4

什麼是運行時錯誤?並且'AClass'是'Base'的直接或間接的子類?你真的試圖實現什麼(因爲直接分配'null'顯然不是一種選擇)? –

+1

你將不得不提供更多細節。我無法複製你的結果。如果'AClass'從'Base'繼承,那麼一切正常,我不會收到運行時錯誤。如果'AClass'沒有從'Base'繼承,我得到一個編譯器錯誤。 – itsme86

回答

1

我認爲你的意思編譯器錯誤是:

無法將類型「ConsoleApplication1.AClass」到 「ConsoleApplication1.Base」通過引用轉換,裝箱 轉換,取消裝箱轉換,包裝轉換,或空型 轉換

這發生在AClass不從Base繼承。 現在你可能會覺得爲什麼界面轉換爲Base也不會失敗。這是因爲Base的某些子類有可能實現I1,這將是有效的轉換。 此外,變量是數組沒有關係爲什麼這個工程或失敗,如我的代碼在下面顯示。

我用這個代碼

 interface I1 { } 
     class AClass : I1 { } 
     class Base { } 
     static void Main(string[] args) 
     { 
      I1 myAClass = new AClass(); 
      Base x = myAClass as Base; 
     } 
相關問題