Typkonvertierung bei Zuweisungen per Reflection

15/01/2008 - 16:03 von Dirk Wölfel | Report spam
Hallo zusammen,

aus einer früheren Frage ergab sich die folgende sub als Lösung. Ziel
war die Zuweisung einer Eigenschaft eines Objekts per Reflection über
den Namen der Eigenschaft als string.

Public Shared Sub SetPropertyByString(ByVal Obj As Object, ByVal
PropertyName As String, _
ByVal Value
As Object)
Dim t As Type = Obj.GetType
Dim pi As Global.System.Reflection.PropertyInfo t.GetProperty(PropertyName)

If pi IsNot Nothing Then
pi.SetValue(Obj, Value, Nothing)
End If
End Sub

Was leider nicht funktioniert: wenn der übergebene Value vom Typ
string - die Property aber z.B. vom typ double ist. Wie kann ich an
der Stelle der Wertzuweisung noch eine Typkonvertierung durchführen.
Meine Versuche mit Gettype den Typ zu bestimmen fnuktionieren leider
so nicht.

Vielen Dank,

Dirk
 

Lesen sie die antworten

#1 Armin Zingler
15/01/2008 - 16:19 | Warnen spam
"Dirk Wölfel" schrieb im Newsbeitrag
news:
Hallo zusammen,

aus einer früheren Frage ergab sich die folgende sub als Lösung. Ziel
war die Zuweisung einer Eigenschaft eines Objekts per Reflection über
den Namen der Eigenschaft als string.

Public Shared Sub SetPropertyByString(ByVal Obj As Object, ByVal
PropertyName As String, _
ByVal Value
As Object)
Dim t As Type = Obj.GetType
Dim pi As Global.System.Reflection.PropertyInfo t.GetProperty(PropertyName)

If pi IsNot Nothing Then
pi.SetValue(Obj, Value, Nothing)
End If
End Sub

Was leider nicht funktioniert: wenn der übergebene Value vom Typ
string - die Property aber z.B. vom typ double ist. Wie kann ich an
der Stelle der Wertzuweisung noch eine Typkonvertierung durchführen.
Meine Versuche mit Gettype den Typ zu bestimmen fnuktionieren leider
so nicht.

__________


Deine Lösung ist abstrakt für ein spezifisches Problem. Das ist das
Problem.

Bedeutet: Die Sub sollte für jeden Typ funktionieren. Jetzt sagst du
aber: wenn...dann... Das ist keine abstrakte Lösung mehr. Du musst also
die Anforderung, "wenn Typ von value = String AND typ von Property =
Double, dann..." umsetzen. Sàhe so aus:

if typeof value is string AndAlso _
pi.propertytype is gettype(double) then

dim val as double

if double.tryparse(value.tostring, val) then
pi.SetValue(Obj, val, Nothing)
else
'wat nu?
end if
end if

Benötigst du noch weitere Spezialaktionen?


Armin

Ähnliche fragen