2016-12-14 38 views
0

我有一個名爲「person」的類,它具有屬性。屬性名稱的幾個例子是...將類屬性名傳遞給子例程

person.name 
person.surname 
person.firstname 

我想這個屬性名傳遞給一個子程序...不知道如果我甚至可以做到這一點。我想這樣做,因爲我將擁有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 

任何關於如何使這項工作或最佳方法的指導?

+0

你應該說明* *什麼你正在嘗試做的 - 這* *怎麼可能未啓用的方式,因爲'getProp'不能是一個可變參數和一些別的屬性。你可以使用反射,但我懷疑有一個更簡單的方法。 GetSet是什麼? – Plutonix

回答

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)