2010-08-16 192 views
3
static RelatedPosts() 
{ 
Post.Saved += new EventHandler<SavedEventArgs>(Post_Saved); 
} 

static void Post_Saved(object sender, SavedEventArgs e) 
{ 
if (e.Action == SaveAction.Update) 
{ 
    Post post = (Post)sender; 
    if (_Cache.ContainsKey(post.Id)) 
    _Cache.Remove(post.Id); 
} 
} 

我轉換爲:你可以將其轉換爲VB嗎?

Shared Sub New() 
    Post.Saved += New EventHandler(Of SavedEventArgs)(AddressOf Post_Saved) 
End Sub 


Private Shared Sub Post_Saved(ByVal sender As Object, ByVal e As SavedEventArgs) 
    If e.Action = SaveAction.Update Then 
     Dim post As Post = DirectCast(sender, Post) 
     If _Cache.ContainsKey(post.Id) Then 
      _Cache.Remove(post.Id) 
     End If 
    End If 
End Sub 

但它給我一個錯誤:

公共共享事件保存()是一個事件,不能直接調用。使用'RaiseEvent'語句來引發一個事件。

+1

您未在該代碼中調用任何事件。你可以發佈錯誤發生的代碼嗎? – Guffa 2010-08-16 11:33:29

+0

我同意@Guffa,您發佈的代碼看起來很好。 – Walter 2010-08-16 11:47:12

回答

4

使用此

AddHandler Post.Saved, AddressOf Post_Saved 

而不是

Post.Saved += New EventHandler(Of SavedEventArgs)(AddressOf Post_Saved) 
+0

非常感謝 – Barga 2010-08-16 12:03:17

0

有一些工具可以爲您提供轉換。有一個非常有名的工具,它允許檢查組件(我不會明確指出它)。我認爲在這種情況下,當免費工具可用於節省時間和精力時,除非 - 在討論事件處理語法差異的具體細節 - 在此處做這件事,否則沒有什麼意義!我希望我不會冒犯任何有這種觀點的人。

3

從我可以收集你有一個事件稱爲Save你試圖調用的地方和你可能做這樣的事情:

Save(myObject, mySavedEventArgs) 

以上是在C#中確定,但是,在VB.NET您需要使用RaiseEvent statement

RaiseEvent Save(myObject, mySavedEventArgs)