2011-03-10 146 views
31

我試圖從一個函數中返回一個字符串數組,並且由於錯誤而感到驚訝。在VB.NET中聲明並初始化一個字符串數組

我本來期望這個工作,但它會產生一個錯誤:

Public Function TestError() As String() 
    Return {"foo", "bar"} 
End Function 

這工作:

Public Function TestOK() As String() 
    Dim ar As String() = {"foo", "bar"} 
    Return ar 
End Function 

一樣:

Public Function TestOK() As String() 
    Return New String() {"foo", "bar"} 
End Function 

我猜我不清楚{}的含義 - 有沒有一種方法隱式返回一個字符串數組而不顯式創建和初始化它?

回答

11
Public Function TestError() As String() 
    Return {"foo", "bar"} 
End Function 

對我來說工作正常,應該爲你工作,但你可能需要允許在你的項目中使用隱式聲明。我相信這會關閉程序設置的「編譯」部分中的「嚴格」選項。

由於使用VS 2008(VB.NET 9.0),你必須聲明創建新實例

New String() {"foo", "Bar"}

+0

使用VS2008,目標是.NET 3.5,並選擇明確的是關閉的,而我仍然得到一個錯誤:「表達式預期」。 – chris 2011-03-10 16:45:12

6

我相信你需要指定"Option Infer On"爲這工作。

Option Infer允許編譯器猜測代碼所代表的內容,因此它會猜測{「stuff」}是一個字符串數組。當「選項關閉」時,{「stuff」}將不會有任何類型分配給它,有史以來,所以它總是會失敗,沒有類型說明符。

選項推理是,我認爲默認情況下在新項目中打開,但在從早期框架遷移到3.5時默認爲關閉。

意見來電:

另外,你提到你有"Option Explicit Off"不要這樣做。

設置「Option Explicit Off」意味着您不必聲明變量。這意味着下面的代碼將默默地和無形地創建變量「Y」:

Dim X as Integer 
Y = 3 

這是可怕的,瘋狂的和錯誤的。它會在你輸入錯誤時創建變量。我一直希望他們會從語言中刪除它。