将OnProperty从C#迁移到VB.Net

将OnProperty从C#迁移到VB.Net,c#,vb.net,linq,converter,C#,Vb.net,Linq,Converter,我发现了一些用于连接IPropertyChanged的非常有趣的代码,请点击查看文章 我的问题是,在将其转换为VB.Net后,我在最后一行OnPropertyChanged(body.Member.Name)的OnPropertyChanged方法中收到一个编译器错误 无法从这些参数推断方法“Protected Overridable Sub OnPropertyChanged(of T)(selectorExpression As System.Linq.Expressions.Express

我发现了一些用于连接IPropertyChanged的非常有趣的代码,请点击查看文章

我的问题是,在将其转换为VB.Net后,我在最后一行OnPropertyChanged(body.Member.Name)的OnPropertyChanged方法中收到一个编译器错误

无法从这些参数推断方法“Protected Overridable Sub OnPropertyChanged(of T)(selectorExpression As System.Linq.Expressions.Expression(of System.Func(of T))”中类型参数的数据类型。显式指定数据类型可能会更正此错误

有人能帮我更正代码以删除错误吗

原始C#版本:


在VB中,它比那个简单得多。。。只需在类的顶部粘贴一个
Implements INotifyPropertyChanged

OnPropertyChanged子项只是引发事件的快捷方式

Imports System.ComponentModel

Public Class SomeClass
    Implements INotifyPropertyChanged

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _
        Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(ByVal propName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub

    Private _someProperty As String = ""
    Public Property SomeProperty As String
        Get
            Return _someProperty
        End Get
        Set(value As String)
            _someProperty = value
            OnPropertyChanged("SomeProperty")
        End Set
    End Property
End Class
或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:

OnPropertyChanged(System.Reflection.MethodInfo.GetCurrentMethod.Name.Replace("set_", ""))
或者,如果您使用的是.NET 4.5+,请将OnPropertyChanged声明更改为:

Private Sub OnPropertyChanged(<CallerMemberName> Optional ByVal propName As String = Nothing)
私有子OnPropertyChanged(可选ByVal propName作为String=Nothing)

在VB中,它比这个简单得多。。。只需在类的顶部粘贴一个
Implements INotifyPropertyChanged

OnPropertyChanged子项只是引发事件的快捷方式

Imports System.ComponentModel

Public Class SomeClass
    Implements INotifyPropertyChanged

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _
        Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(ByVal propName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub

    Private _someProperty As String = ""
    Public Property SomeProperty As String
        Get
            Return _someProperty
        End Get
        Set(value As String)
            _someProperty = value
            OnPropertyChanged("SomeProperty")
        End Set
    End Property
End Class
或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:

OnPropertyChanged(System.Reflection.MethodInfo.GetCurrentMethod.Name.Replace("set_", ""))
或者,如果您使用的是.NET 4.5+,请将OnPropertyChanged声明更改为:

Private Sub OnPropertyChanged(<CallerMemberName> Optional ByVal propName As String = Nothing)
私有子OnPropertyChanged(可选ByVal propName作为String=Nothing)

在VB中,它比这个简单得多。。。只需在类的顶部粘贴一个
Implements INotifyPropertyChanged

OnPropertyChanged子项只是引发事件的快捷方式

Imports System.ComponentModel

Public Class SomeClass
    Implements INotifyPropertyChanged

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _
        Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(ByVal propName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub

    Private _someProperty As String = ""
    Public Property SomeProperty As String
        Get
            Return _someProperty
        End Get
        Set(value As String)
            _someProperty = value
            OnPropertyChanged("SomeProperty")
        End Set
    End Property
End Class
或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:

OnPropertyChanged(System.Reflection.MethodInfo.GetCurrentMethod.Name.Replace("set_", ""))
或者,如果您使用的是.NET 4.5+,请将OnPropertyChanged声明更改为:

Private Sub OnPropertyChanged(<CallerMemberName> Optional ByVal propName As String = Nothing)
私有子OnPropertyChanged(可选ByVal propName作为String=Nothing)

在VB中,它比这个简单得多。。。只需在类的顶部粘贴一个
Implements INotifyPropertyChanged

OnPropertyChanged子项只是引发事件的快捷方式

Imports System.ComponentModel

Public Class SomeClass
    Implements INotifyPropertyChanged

    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _
        Implements INotifyPropertyChanged.PropertyChanged

    Protected Sub OnPropertyChanged(ByVal propName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub

    Private _someProperty As String = ""
    Public Property SomeProperty As String
        Get
            Return _someProperty
        End Get
        Set(value As String)
            _someProperty = value
            OnPropertyChanged("SomeProperty")
        End Set
    End Property
End Class
或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:

OnPropertyChanged(System.Reflection.MethodInfo.GetCurrentMethod.Name.Replace("set_", ""))
或者,如果您使用的是.NET 4.5+,请将OnPropertyChanged声明更改为:

Private Sub OnPropertyChanged(<CallerMemberName> Optional ByVal propName As String = Nothing)
私有子OnPropertyChanged(可选ByVal propName作为String=Nothing)

并且不带参数地调用它。

我发现我需要从文章中添加以下代码:

Public Event PropertyChangedHandler As PropertyChangedEventHandler 

Protected Sub OnPropertyChanged(propertyName As String)
    RaiseEvent PropertyChangedHandler(Me, New PropertyChangedEventArgs(propertyName))
End Sub

我发现我需要从文章中添加以下代码:

Public Event PropertyChangedHandler As PropertyChangedEventHandler 

Protected Sub OnPropertyChanged(propertyName As String)
    RaiseEvent PropertyChangedHandler(Me, New PropertyChangedEventArgs(propertyName))
End Sub

我发现我需要从文章中添加以下代码:

Public Event PropertyChangedHandler As PropertyChangedEventHandler 

Protected Sub OnPropertyChanged(propertyName As String)
    RaiseEvent PropertyChangedHandler(Me, New PropertyChangedEventArgs(propertyName))
End Sub

我发现我需要从文章中添加以下代码:

Public Event PropertyChangedHandler As PropertyChangedEventHandler 

Protected Sub OnPropertyChanged(propertyName As String)
    RaiseEvent PropertyChangedHandler(Me, New PropertyChangedEventArgs(propertyName))
End Sub


或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:
CallerMemberNameAttribute
不适用于VB.NET吗?仅适用于.NET 4.5。。。不幸的是,它花了这么长时间才进入…@monkey:如果复制/粘贴属性,它本身也可以在.NET 2.0中工作:重要的是,尽管您需要来自VS2012的C#5编译器。如果您使用2013,但目标是较旧的项目,则非常有用;)@克里斯·伊尔玛非常有用。我打算忽略该属性,因为我必须针对较旧的框架,很高兴知道!或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:
CallerMemberNameAttribute
不适用于VB.NET吗?仅适用于.NET 4.5。。。不幸的是,它花了这么长时间才进入…@monkey:如果复制/粘贴属性,它本身也可以在.NET 2.0中工作:重要的是,尽管您需要来自VS2012的C#5编译器。如果您使用2013,但目标是较旧的项目,则非常有用;)@克里斯·伊尔玛非常有用。我打算忽略该属性,因为我必须针对较旧的框架,很高兴知道!或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:
CallerMemberNameAttribute
不适用于VB.NET吗?仅适用于.NET 4.5。。。不幸的是,它花了这么长时间才进入…@monkey:如果复制/粘贴属性,它本身也可以在.NET 2.0中工作:重要的是,尽管您需要来自VS2012的C#5编译器。如果您使用2013,但目标是较旧的项目,则非常有用;)@克里斯·伊尔玛非常有用。我打算忽略该属性,因为我必须针对较旧的框架,很高兴知道!或者,如果您想要一些没有魔法字符串的东西,只要您不介意使用反射,就可以复制并粘贴到任何地方:
CallerMemberNameAttribute
不适用于VB.NET吗?仅适用于.NET 4.5。。。不幸的是,它花了这么长时间才进入…@monkey:如果复制/粘贴属性,它本身也可以在.NET 2.0中工作:重要的是,尽管您需要来自VS2012的C#5编译器。如果您使用2013,但目标是较旧的项目,则非常有用;)@克里斯·伊尔玛非常有用。我打算忽略该属性,因为我必须针对较旧的框架,很高兴知道!事实上,如果有人先发布我的问题,这个答案本可以解决我的问题,这就是为什么我在回答我自己的问题时会将其作为答案。@scott\u f:请忽略它们,如果你解决了自己的问题,可以将其作为答案发布:事实上,如果其他人发布,这就是解决我问题的答案