As you have specified C# 2.0 then I think the answer will be that you can't. C# is statically typed and this code types the generic collection to a collection of Item. If Product were a superclass of Item then I believe you could store them in this collection but you'd need to query the object type when you retrieved it from the collection as it'll always come back as an Item.
I'll throw a question back at you, what are you trying to achieve in this dynamic replacement and why? There may be a better answer.
EDIT
Thinking about it further, following the comment, you might be able to do it using an interface, i.e.:
public IList myCollection { get; set; }
I haven't tried it, away from my dev station but might spark some others to either agree or correct me :)