I understand that when you use an explicit cast like this:
(someType)someobject
you can get an invalid cast exception if someobject
is not really someType
.
As well I understand that when you cast with as
like this:
myObject = someObject as someType
myObject
is just rendered null
if someObject
isn't really someType
.
How are these evaluated differently and why?
Implicit conversion is the conversion in which a derived class is converted into a base class like int into a float type. Explicit conversion is the conversion that may cause data loss. Explicit conversion converts the base class into the derived class.
Cast, in the context of C#, is a method by which a value is converted from one data type to another. Cast is an explicit conversion by which the compiler is informed about the conversion and the resulting possibility of data loss.
John Skeet has a C# faq where he explains the differences between the two operators. See paragraph 'What's the difference between using cast syntax and the as operator?'.
Quote :
Using the as operator differs from a cast in C# in three important ways:
- It returns a null when the variable you are trying to convert is not of the requested type or in its inheritance chain, instead of throwing an exception.
- It can only be applied to reference type variables converting to reference types.
- Using as will not perform user-defined conversions, such as implicit or explicit conversion operators, which casting syntax will do.
There are in fact two completely different operations defined in IL that handle these two keywords (the castclass and isinst instructions) - it's not just "syntactic sugar" written by C# to get this different behavior. The as operator appears to be slightly faster in v1.0 and v1.1 of Microsoft's CLR compared to casting (even in cases where there are no invalid casts which would severely lower casting's performance due to exceptions).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With