2016-12-14 6 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

あなたは* *あなたがやろうとしているかを記述する必要があります可変パラメータと他の何らかの特性を持つ。あなたはReflectionを使うことができますが、もっと簡単な方法があると思います。一体何が 'GetSet'ですか? – Plutonix

答えて

1

反射が機能します。プロパティは公開が、しかし、その後、あなたは、単にコードがCallByName()を使用することができている場合: - * `のでgetProp`がどのように*イマイチ可能という方法であるカント

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) 
関連する問題