I have a base class `Element` and a derived class `ViewSheet`. When I am collecting all of my `ViewSheet` objects they are being cast to `Element` by the collector method. Now I need to call a method on each object called `ViewSheet.get_Parameter()`. That method only exists on a derived class so cannot be called on `Element`. 

I can find out what derived type is from calling `Element.GetType()` but then how can I actually cast that object to `ViewSheet` and then call the `ViewSheet.get_Parameter()` on it? 

Since this happens a lot, I would need to implement some sort of generic method that could accept different base class + derived class combinations. Any ideas will be appreciated.

Example of collector method:

```
`ICollection<Element> allElements = 
    new FilteredElementCollector(activeDoc)
    .OfCategory(someCategory)
    .WhereElementIsNotElementType()
    .ToElements();

```

This always returns object collection of `Element` since thats the base class for all objects that I am dealing with. I could do a Linq cast during that collection but I would need to know that based on my Category I would be collecting specific type of objects which I do not now at the outset. Only when I actually collect all `Element` objects and call `GetType()` do I know what type I am dealing with.