Не используйте параметр типа объекта, используйте generics .
Затем вы можете ограничить этот универсальный тип для реализации интерфейса или наследования от базового класса.
После этого вы сможете получить доступ к свойствам и функциям, определенным в ограниченном интерфейсе / базовом типе. Вы также можете определить свой собственный интерфейс и ограничиться им.
Пример кода:
public void MyFunc<T>(T myParam)
where T : IEnumerable // or some other interface or base class.
{
foreach (var child in myParam) // uses the interface IEnumerable that the generic was constrained to
{
// do something
}
}