On top of everything else that's been said, using managed code, C#, VB.NET, or any other language that targets the .NET Framework, an item can be moved in memory by the Garbage Collector at any time. So, even though you got the pointer to item, you really cannot use the pointer because the item might not be there anymore. The pointer you have will NOT get updated to reflect the new location in memory. However, there is a way aroudn that. It's called "pinning". The GC can be told to pin an object in memory so it can't be moved. Read up on it here[^]. Be careful. When you pin an object, you are also responsible for removing the pin when you're done with it.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007, 2008
But no longer in 2009...