http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88420.aspx
"Using the as operator differs from cast in C # in three important ways:
1) It returns null when the variable you are trying to convert does not belong to the requested type or inheritance chain instead of throwing an exception.
2) It can only be applied to variables of a reference type that are converted to reference types.
3) Use because it will not perform custom conversions, such as implicit or explicit conversion operators, that will perform casting syntax.
In fact, there are two completely different operations defined in IL that process these two keywords (castclass and isinst instructions) - it's not just “syntactic sugar” written by C # to get this different behavior. The as statement looks a little faster in versions 1.0 and v1.1 of the Microsoft CLR compared to casting (even in cases where there are no invalid throws that would significantly reduce casting efficiency due to exceptions).
source share