Jak sprawdzić czy obiekt jest Dictionary i pracować z nim

0

Hej, w moim kodzie, typ zmiennej target zmienia sie dynamicznie. W pewnym momencie jest to Dictionary ktorego klucze to najczesciej jakis enum a wartosci do obiekty pewnej klasy. To co chcialbym zrobic to sprawdzic czy moja zmienna target jest Dictionary i jesli tak to moc uzyc na niej metod dostepnych dla Dictionary. Oto moj kod ktory w chwili obecnej nie dziala poprawnie bo nie wchodze do if'a:

if(target is IDictionary<object, object> dictTarget)
    stringDict = dictTarget.ToDictionary(_ => _.Key.ToString(), _ => _.Value);

Co powinienem zmienic? To co chce zrobic to po prostu zmienic klucze w moim dictionary na Stringi a wartosci zostawic bez zmian.

0

Hej, w moim widelcu trochę cieknie zupa, jak zrobić widelec który warunkowo przestawia się do zupy

@Tuptuś Tupta:

To dalszy ciąg tego nieco chorego wątku ?
Może wydukasz z siebie, jaki problem naprawdę usiłujesz zaimple ... popsuć ?

ps: niemal nigdy typ obiektu nie zmienia się ZUPEŁNIE poza wszelkim projektem. Zwykle sa jakoś zaprojektowane ograniczenia. A jak projekt jest, można na to zaradzić

5

Pomijając to że pomysł który opisujesz wydaje się dziwny, to IF Ci się nie odpala bo w przypadku generyków typ jest równy innemu typowi jeśli mają te same argumenty generyczne. Mógłbyś to jakoś sprawdzić refleksją, ale raczej to słaby pomysł.

Co chcesz konkretnie osiągnąć, tzn. czemu musisz operować na dynamicznym obiekcie? Najprawdopodobniej podchodzisz do problemu od złej strony, i da się to zrobić lepiej.

Tutaj masz rozwiązanie jak to zrobić refleksją, jeśli naprawdę chcesz:

bool result1 = type.GetInterfaces()
    .Where(i => i.IsGenericType)
    .Any(i => i.GetGenericTypeDefinition() == typeof(MyInterface<,>));

Źródło

3

Hej, w moim kodzie, typ zmiennej target zmienia sie dynamicznie.

Ok, but why?

Wez to chociaz w ADT zapakuj. Jakis Either czy cokolwiek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1