use dynamic generic type parameter instead of object