将类属性名称传递给子例程

时间:2016-12-14 22:49:20

标签: vb.net

我有一个名为" person"的类,有属性。一些属性名称的例子是......

person.name
person.surname
person.firstname

我试图将此属性NAME传递给子程序...不确定我是否可以执行此操作。我想这样做是因为我将拥有100个属性,而且我不想要100个IF然后声明。

这就是我目前正在做的事情,我想用一种方法来清理它。如果是这样的语句,请检查图片100,检查不同的属性名称。

If propname= "FirstName" Then
       If GetSet.caseexact = True Then
              If GetSet.casesensativity = True Then
                   View.Filter = Function(m) DirectCast(m, person).FirstName = s
              Else
                   View.Filter = Function(m) DirectCast(m, person).FirstName.ToLower = s.ToLower
              End If
       Else
              If GetSet.casesensativity = True Then
                   View.Filter = Function(m) DirectCast(m, person).FirstName.Contains(s)
              Else
                   View.Filter = Function(m) DirectCast(m, person).FirstName.ToLower.Contains(s.ToLower)
              End If
       End If
End If

我试图用方法清理它,所以我可以将属性名称传递给方法......如果这是可能的话。

Public Sub properties(filterstring As String, getProp as person)
    View.Filter = Function(m) DirectCast(m, person).getProp = filterstring 
End Sub

有关如何使其发挥作用或最佳方法的任何指导?

1 个答案:

答案 0 :(得分:1)

反思会起作用。如果属性公开,那么您可以使用CallByName()简单地使用代码:

    Dim p As New Person
    p.FirstName = "Mike"

    Dim s As String = "Bob"
    Dim propname As String = "FirstName"
    View.Filter = (CallByName(p, propname, CallType.Get) = s)
    ' < or >
    View.Filter = (CallByName(p, propname, CallType.Get).ToString.ToLower = s)