Set property Nullable<> durch Reflexion
Ich versuchen, eine Nullable<> Eigenschaft dynamicly.
Bekomme ich meine Eigenschaft ex :
PropertyInfo property = class.GetProperty("PropertyName"); //My property is Nullable<> at this time So the type could be a string or int
Möchte ich mein Eigentum durch Reflexion wie
property.SetValue(class,"1256",null);
Funktioniert es nicht, wenn mein Eigentum ist ein Nullable<> Generic. Also versuche ich einen Weg finden, mein Eigentum.
Wissen, die Art meiner nullable<> Eigenschaft, die ich ausführen
Nullable.GetUnderlyingType(property.PropertyType)
Irgendeine Idee ?
- Ich Versuche, eine Instanz zu schaffen, meine Nullable<> Immobilie mit
var nullVar = Activator.CreateInstance(typeof(Nullable<>).MakeGenericType(new Type[] { null-Werte zu.GetUnderlyingType(Eigenschaft.Art der Unterkunft) }));
Aber nullVar ist immer Null
Funktioniert es, wenn Sie einen integer anstelle eines Strings?
Es wird funktionieren, aber der Punkt ist, ich weiß nicht, die Art der nullable-Eigenschaft. Könnte ich null-Werte zu.GetUnderlyingType(Eigenschaft.Art der Unterkunft), um den Typ
"1256"
ist ein string, kein integer.Es wird funktionieren, aber der Punkt ist, ich weiß nicht, die Art der nullable-Eigenschaft. Könnte ich null-Werte zu.GetUnderlyingType(Eigenschaft.Art der Unterkunft), um den Typ
Nullable<>
nicht verwenden string
für den zugrunde liegenden Typ als string
ist ein Referenz-Typ. In anderen Worten typeof(Nullable<>).MakeGenericType(t);
wird in Ordnung sein, wenn t == typeof(int)
, aber es wird explodieren (constraint nicht erfüllt) mit t == typeof(string)
. So Nullable<>
wird nicht in irgendeiner Weise zu handeln als eine Art "common type" für Referenz-Typen und nullable value types.InformationsquelleAutor Cédric Boivin | 2009-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, konvertieren Sie einen beliebigen string, um den zugrunde liegenden Typ der null-Werte zulässt, können Sie verwenden Sie die Convert-Klasse:
Diesem Beispiel wird der Ziel-Typ int, short, long (bzw. unsigned Varianten, da der input-string repräsentiert eine nicht-negative Zahl), double, float oder decimal. Einschränkung: dies ist nicht schnellen code.
Es ist workin Dank
Es funktioniert, danke
InformationsquelleAutor Ben M
Wenn es eine null-int, benötigen Sie einen int-parameter, nicht einen string.
Beachten Sie die änderung klass, statt Klasse, als Klasse, ist ein reserviertes Schlüsselwort. Sie können auch @Klasse, wenn es unbedingt nötig ist (zu zitieren).
Wenn Sie Ihre Immobilie ist eine generische, dann denke ich, werden Sie wahrscheinlich verwenden müssen, Konvertieren Sie, was Sie haben, was Sie brauchen.
Man kann nicht ein
Nullable<string>
, dastring
ist nicht ein Wert-Typ.InformationsquelleAutor tvanfosson
Hier ein komplettes Beispiel zeigen, wie es zu tun:
Wie andere erwähnt haben, die Sie übergeben müssen, die richtige Art der
SetValue
Funktion, sondern Ihre weitere Reflexion der code ist nicht ganz richtig, entweder. Sie brauchen, um den Typ der Klasse in Frage, bevor Sie die Abfrage für seine Mitglieder.Edit: Wenn ich das richtig verstehe, sind Sie versucht, einen string-Wert zu einer Eigenschaft, die über Reflexion. Um dies zu tun, müssen Sie irgendeine Art Inspektion und Typ-Umwandlung.
Hier ist ein Beispiel, was ich meine:
Dieser Ansatz kann sicher verwendet werden, unabhängig davon, ob oder nicht die Eigenschaft
Nullable<>
.InformationsquelleAutor Andrew Hare
"1256"
ist ein string, kein int.InformationsquelleAutor Steve Gilham
Traf ich das gleiche problem sowie ein Problem mit dem Konvertieren.ChangeType Umgang DateTimes auf Nullables so kombinierte ich ein paar stackoverflow-Lösungen mit einigen .NET 4 dynamische Magie, um etwas, was ich denke, ist eine Art süß. Wenn Sie einen Blick auf den code, wir verwenden dynamische Typ des Objekts, um null-Werte zulässt, die zur Laufzeit dann die Laufzeit behandelt es anders und erlaubt die Zuordnungen des Basistyps auf die nullable-Objekt.
InformationsquelleAutor AdamCrawford
InformationsquelleAutor czlatea