Personally, I'd do it slightly differently:
public class Vehicle
{
}
public class Car : Vehicle
{
What that means is that every Car is also a Vehicle, so you can store all Vehicle types in your cache:
public class CarCache
{
public IList<Car> SomeCars
{
get
{
return _vehicles.Where(v => v is Car).Cast<Car>().ToList();
}
}
private List<Vehicle> _vehicles = new List<Vehicle>();
public void Add(Vehicle v) { _vehicles.Add(v); }
}
(Don't store the collection as an IEnumerable: it doesn't have an Add method so it's difficult to change the content!)