Chcę wziąć obiekt anonimowy jako argument do metody, a następnie iterować jego właściwości, aby dodać każdą właściwość/wartość do dynamicznego ExpandoObject
.Jak wykonać iterację właściwości anonimowego obiektu w języku C#?
Więc co potrzebne jest, aby przejść od
new { Prop1 = "first value", Prop2 = SomeObjectInstance, Prop3 = 1234 }
do znając nazwy i wartości każdej nieruchomości, a będąc w stanie dodać je do ExpandoObject
.
Jak to zrobić?
Nota boczna: Zostanie to zrobione w wielu testach jednostkowych (używam go do usunięcia dużej ilości śmieci w konfiguracji), więc wydajność jest w pewnym stopniu istotna. Nie wiem wystarczająco dużo o refleksji powiedzieć na pewno, ale z tego co zrozumiałem to dość ciężki wydajność, więc jeśli jest to możliwe, wolałbym uniknąć ...
kolejne pytanie: Jak już powiedziałem, biorę ten anonimowy obiekt jako argument do metody. Jaki typ danych powinienem użyć w podpisie metody? Czy wszystkie właściwości będą dostępne, jeśli użyję object
?
Odbicie wydajności naprawdę nie jest zbyt straszne. Jeśli masz bardzo dużą liczbę instancji, do których musisz to zrobić, możesz buforować wpisy PropertyInfo dla danego anonimowego typu, a następnie powtarzać te wpisy PropertyInfo, aby rozwiązać właściwości dla każdej instancji. Można nawet tworzyć delegatów dla GetMethod dla każdej właściwości i buforować te. –