Create names that are descriptive of the objects and of your usage of them. The names and the context (not to mention the intellisense) should be enough to remind you of their types as you look at them.
On that note, I feel your pain. I learned VB6 in college and was taught hungarian notation where a variable for a first name would be called strFirst. As I moved over to .NET and C#, I was not quick to let my old habit go even though the accepted standard for C# did not include such notation. I quasi-conformed (or at least, that's what I told myself) by shortening the notation to a single character, so first name would be stored in a variable called sFirst. I told myself I needed that character so I would know what my variable type was. But you know what? It reinforced another bad habit, in that my variable name was not descriptive enough. What is sFirst? First of what? Now, I could have obviously made the variable name more descriptive and kept the hungarian notation, but for me the one bad habit (the notation) went hand-in-hand with the other (abbreviated variable names).
Eventually, and it was probably less than a year ago, I bit the bullet and started writing code the "proper" way. The notation is gone, my names are more descriptive, and (best of all) I have no issue with looking at code and knowing from name/context what type of variable I'm working with and there is also no ambiguity of knowing what the variable refers to. I say let go, you'll not miss it.