Voglio prendere un oggetto anonimo come argomento di un metodo, quindi scorrere le sue proprietà per aggiungere ogni proprietà/valore ad un dinamico ExpandoObject
.Come faccio a scorrere le proprietà di un oggetto anonimo in C#?
Così che cosa ho bisogno è di andare da
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
a conoscere i nomi ei valori di ogni proprietà, e di essere in grado di aggiungerli alla ExpandoObject
.
Come posso realizzare questo?
Nota a margine: Questo sarà fatto in molti dei miei test di unità (lo sto usando per rifattorare molta roba nel setup), quindi le prestazioni sono in qualche misura rilevanti. Non so abbastanza di riflessione per dirlo con certezza, ma da quello che ho capito è abbastanza pesante prestazioni, quindi se è possibile, preferirei evitarlo ...
Follow-up domanda: Come ho detto, sto prendendo questo oggetto anonimo come argomento per un metodo. Quale tipo di dati dovrei usare nella firma del metodo? Tutte le proprietà saranno disponibili se utilizzo object
?
Le prestazioni di riflessione non sono poi così terribili. Se si dispone di un numero molto elevato di istanze a cui è necessario eseguire questa operazione, è possibile memorizzare nella cache le voci PropertyInfo per un determinato tipo anonimo e quindi reiterare su tali voci PropertyInfo per risolvere le proprietà per ciascuna istanza. È anche possibile creare delegati per GetMethod per ciascuna proprietà e memorizzarli nella cache. –