Mam potrzebę wywoływania metod na typ poprzez odbicie za pomocą C#.Jak wykonać automatyczną konwersję typów parametrów podczas wywoływania metody za pomocą odbicia w języku C#?
W czasie wykonywania moje dane będą składać się ze Słownika zawierającego pary nazwa/wartość. Nazwy w Słowniku będą odpowiadać nazwom parametrów w metodzie, którą wywołam. Ponadto, w czasie wykonywania, będę mieć arbitralny kwalifikowany typ nazwy zespołu i nazwę metody. W czasie projektowania nie będę miał wiedzy o typie i metodzie innej niż metoda akceptująca zmienną liczbę parametrów typu int, string, DateTime, bool, int [], string [], DateTime [] lub bool [].
Nie mam problemu z dojściem do punktu, w którym mogę utworzyć instancję typu za pomocą refleksji i wywołać metodę. Siedzę w miejscu, gdzie mam do konwersji wartości ciągu w moim słowniku, do odpowiedniego typu potrzebnego metodą kiedy rozmowy:
someMethodInfo.Invoke(instance, new [] { ... })
wiem, że muszę chyba wyliczyć poprzez MethodInfo.GetParameters() i wykonać konwersję typu dla każdego parametru. Próbuję dowiedzieć się, jak to zrobić, i najlepiej, jak zrobić to skutecznie.
Moje dotychczasowe badania dotyczyły kopania kodu źródłowego MVC, podobnie jak w przypadku przekazywania wartości formularza do metody ActionMethod. Znalazłem ActionMethodDispatcher, ale używają wyrażeń LINQ, z którymi jestem nieznany.
Przyjrzałem się także podobnym pytaniom na temat SO, ale nie znalazłem niczego, co by odpowiedziało na moje pytanie.
Z zadowoleniem przyjmuję wszelkie wskazówki dotyczące rozwiązania.
Może być lepsze sposoby, aby przejść, ale użyłem [System.Convert] (http://msdn.microsoft.com/en-us/library/system. convert.aspx) dla podobnych potrzeb. Radzenie sobie z typami nullabe dodatkowo zwiększa dodatkową złożoność. – Clayton
Inną opcją dla bardziej arbitralnej konwersji jest [TypeConverter] (http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter (v = VS.100) .aspx), chociaż nie jestem pewnie, jak to by działało z tablicami. –
@Clayton Tak, myślę, że System.Convert będzie moim rozwiązaniem, jeśli nie będzie nic bardziej eleganckiego.Wydaje się, że może istnieć bardziej efektywny sposób niż przechodzenie między poszczególnymi typami parametrów i używanie System.Convert w przełączniku (...) do wykonywania konwersji poszczególnych typów. –