2011-09-19 60 views
2

幾個月來,使用異步CTP i將以下成功編譯:突然VB.Net Iterator函數不會編譯?

Public Shared Iterator Function FindVisualChildren(Of T As DependencyObject)(ByVal depObj As DependencyObject) As IEnumerable(Of T) 
    If depObj IsNot Nothing Then 
     For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(depObj) - 1 
      Dim child As DependencyObject = VisualTreeHelper.GetChild(depObj, i) 
      If child IsNot Nothing AndAlso TypeOf child Is T Then 

       Yield CType(child, T) 
      End If 

      For Each childOfChild As T In FindVisualChildren(Of T)(child) 

       Yield childOfChild 
      Next childOfChild 
     Next i 
    End If 
End Function 

突然間,這已不再是這種情況。 Visual Studio不再顯示識別語法和「希望語句結束」的波形函數。

最近,我的機器在Visual Studio打開時一直處於(對我不利)的狀態,它自動關閉以安裝一些Winows更新。然後,我一直無法編譯解決方案。我在2周前爲我的解決方案備份了一個備份,目的只是爲了確保我沒有丟失任何東西,而且我看到了同樣的問題。

我試着卸載並重新安裝.Net Framework異步CTP。

從我所知道的最近,我收到了幾個> net framework 4更新和安全更新。

我希望別人能夠幫助我解決這個問題,併爲我節省了與MS有關的電話浪費。

+0

進行異步工作的其他地方好嗎? –

+0

我能夠編譯並運行兩個示例(例如,來自Documents \ Microsoft Visual Studio異步CTP \ Samples \(VB 101)教程漫遊文件夾的NetFlix)。目前,我只使用Async在VB中獲得迭代器和收益能力的目的。 –

+2

如果其他異步樣本的工作,這表明編譯器本身是好的...非常奇怪。 –

回答

0

在你的函數定義中你有一個錯誤。請檢查在VB中聲明函數的文檔。我想你已經把它與C#或其他編程語言混淆了。

http://msdn.microsoft.com/en-gb/library/sect4ck6.aspx

字迭代應,因爲該函數的返回值在與功能的端部給定...爲IEnumerable(OF T)不會被共享和功能之間使用。

迭代器proceduremodifiers僅適用於Visual Studio 11,因此通常不會用VS 10或更低編譯:

Iterator Proceduremodifier

+0

您正在查看錯誤的版本;請參閱http://msdn.microsoft.com/en-gb/library/sect4ck6%28v=vs.110%29.aspx – Justin

+0

然後,使用的Visual Studio應該是帶有用於編譯的4.5.Net Framework的版本11。我沒有VS 2011,因此無法測試此代碼。 –