2010-08-16 77 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)