Sto ancora lavorando al mio componente di registrazione generico che dovrebbe gestire qualsiasi tipo di object
e convertirlo ("serializzarlo") in una stringa."Downcast" un oggetto al suo tipo base in C#
Funziona abbastanza bene finora, tranne per un requisito: dovrei essere in grado di identificare il tipo di base di un dato oggetto (se ne esiste uno) e anche elencare le proprietà del tipo di base separatamente.
Fondamentalmente, ho un metodo simile a questa:
public string LogObject(object myObject)
e ora mi piacerebbe verificare se il tipo di questo oggetto ha una classe di base, e in tal caso - ottenere le proprietà di mio oggetto , "downcast" al suo tipo di base.
La verifica del tipo di base non è difficile:
Type baseType = myObject.GetType().BaseType;
Ma come faccio a Downcast myObject
a un oggetto di tipo baseType
ora?
ho provato diverse cose, come:
object baseObject = Convert.ChangeType(myObject, baseType);
ma che richiede il mio tipo di oggetto per implementare IConvertible
cui non possibile posso esigere da tutti i miei oggetti ...
Qualsiasi altro modo?
Quelli ovviamente non funzionano ....
object baseObject = myObject as baseType;
object baseObject = (baseType)myObject;
Qualsiasi altro modo non sto pensando di?
Aggiornamento: avevo già pensato di farlo a
- afferrare tutte le proprietà di
myObject
inallProperties
- afferrando solo quelle proprietà dichiarate dal tipo
myObject
indeclaredProperties
(BindingFlag.Declared
) - ottenendo il
baseProperties
sottraendo lodeclaredProperties
daallProperties
ma che sembra solo un po 'eccessivo sulla riflessione - non so se questo esibiranno decentemente ....
Non si possono semplicemente ottenere le proprietà del tipo di base da 'baseType' ed escluderle dall'elenco delle proprietà prese da' myObject'? (probabilmente mostrando la mia ignoranza riguardo alla riflessione) – Oded
Cosa stai cercando di ottenere? 'myObject' è già di tipo' baseType'. – Igor
@Igor: Devo essere in grado di ottenere un elenco delle proprietà di 'baseType' ** solo ** –