你能把它转换成VB吗?

时间:2010-08-16 11:29:12

标签: c# vb.net

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);
 }
}

我转换为:

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

但它给了我一个错误:

公共共享事件Saved()是一个事件,无法直接调用。使用'RaiseEvent'语句来引发事件。

3 个答案:

答案 0 :(得分:4)

使用此

AddHandler Post.Saved, AddressOf Post_Saved

而不是

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

答案 1 :(得分:3)

从我可以收集到的内容中,您有一个名为Save的事件,您试图在某个地方调用它并且您可能正在执行以下操作:

Save(myObject, mySavedEventArgs)

以上在C#中没问题,但是在VB.NET中你需要使用RaiseEvent statement

RaiseEvent Save(myObject, mySavedEventArgs)

答案 2 :(得分:0)

有一些工具可以为您提供转换。有一个众所周知的工具,允许检查组件(我不会明确地命名)。我认为在这种情况下,当一个免费工具可用于节省时间和精力时,除非 - 谈论事件处理语法差异的具体细节 - 在这里这样做是没有意义的!我希望我不要冒犯任何有这种观点的人。