Ich untersuche die Eigenschaften eines Objekts durch Reflexion und verarbeite den Datentyp jeder Eigenschaft weiter. Hier ist meine (reduzierte) Quelle:
private void ExamineObject(object o)
{
Type type = default(Type);
Type propertyType = default(Type);
PropertyInfo[] propertyInfo = null;
type = o.GetType();
propertyInfo = type.GetProperties(BindingFlags.GetProperty |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
// Loop over all properties
for (int propertyInfoIndex = 0; propertyInfoIndex <= propertyInfo.Length - 1; propertyInfoIndex++)
{
propertyType = propertyInfo[propertyInfoIndex].PropertyType;
}
}
Mein Problem ist, dass ich neu nullbare Eigenschaften verarbeiten muss, aber ich habe keine Ahnung, wie ich den Typ einer nullbaren Eigenschaft erhalten kann.
c#
.net
reflection
nullable
user705274
quelle
quelle
Antworten:
mögliche Lösung:
quelle
propertyType = Nullable.GetUnderlyingType(propertyType) ?? propertyType
propertyType.IsGenericType
wird in der Tat vorher benötigtpropertyType.GetGenericTypeDefinition()
, sonst wird eine Ausnahme ausgelöst. +1Nullable.GetUnderlyingType(fi.FieldType)
erledigt die Arbeit für Sie. Überprüfen Sie den folgenden Code, um das zu tun, was Sie wollenquelle
Nullable.GetUnderlyingType(type)
Lösung, weil sietype.GetGenericArguments()[0]
zumindest in diesem Fall expliziter ist als .Nullable.GetUnderlyingType
tun Sie dies bereits nativ. GetUnderlyingType gibt null zurück, wenn der Typ nicht nullable <> ist (Quelle: msdn.microsoft.com/en-US/library/… )quelle
Ich verwende eine Schleife, um alle Klasseneigenschaften zu durchlaufen und den Eigenschaftstyp abzurufen. Ich benutze den folgenden Code:
quelle
Diese Methode ist einfach, schnell und sicher
quelle
Wie von Yves M. hervorgehoben , ist es so einfach wie unten.
quelle