The "as" keyword in C# attempts to cast an instance to a specific type and if it fails returns null.
The problem is, I'm not really sure when this would really be that useful. If you expect the variable to be of a specific type then you should just perform an explicit cast and an exception is raised to break the program flow if it fails. If you think it's possible it won't be of that type, then shouldn't that be in an "if" statement using the "is" operator? Returning null means you lose information - now you no longer know whether the instance was null to begin with. It just means that you'll end up with a NullReferenceException which is misleading because it was actually an InvalidCastException. Sometimes the instance is then checked to see if it's null and the it's used to raise an error, which is silly because they should be using "is" instead.
However, sometimes the problem with "is" is that of scoping. It means that if you're assigning the variable inside the if block, and you want to use it outside the if block, then you have to declare the variable you're assigning it to outside of the if or it'll be lost in that scope. It seems awkward.
I have a suggestion to change the syntax of the "as" cast operator to make it more useful: Add an "else" part that specifies an expression that is assigned to the instance, or an exception that is thrown, if the instance cannot be cast. eg.
IDisposable disp = obj as IDisposable else throw new InvalidCastException("The object does not support IDisposable");
or...
IFolder folder = item as IFolder else originalFolder;
Wouldn't that be more useful?