Possible Duplicate:
Casting: (NewType) vs. Object as NewType
Casting vs using the 'as' keyword in the CLR
//var gridView = (gridViewRow.NamingContainer as GridView); <-- works too
var gridView = (GridView)gridViewRow.NamingContainer;
My incomplete understanding of this is using as
keyword can give null
when using a cast ()
will throw an exception. My goal is to be able to ask myself "which way should I cast?" and know how to answer it.
It depends, but basically:
If you know and can guarantee that the object is the type you think it is then use ()
.
If there's a possibility that it could be something else then use as
and check for null
. In this case you'd have:
var realThing = someObject as MyClass;
if (realThing != null)
{
....
}
You can use is
to guard the ()
which would result in:
if (someObject is MyClass)
{
var realThing = (MyClass)someObject;
....
}
But this results in two conversions, rather than the one of as
or the straight ()
cast.
This is where the "it depends" comes in. You'd have to decide on a case by case basis which was more appropriate. You might have coding standards to adhere to as well.
The question is more of
How do I want my code to deal with a dynamic cast failure?
If you have an implicit / explicit contract that gridViewRow.NamingConainer
is in fact a GridView
then an ()
cast is appropriate. If the type is not a GridView
it's violated a contract, an exception is thrown and the error will be apparent. However if it's possible that it's not a GridView
and you want to proactively handle the case then as
is appropriate.
In this case it looks like you do have an implicit contract that it is a GridView
and hence I would continue to use ()
. If you went with as
and the contract was broken you'd end up with a NullReferenceException
which is not actually the problem. The problem is the type wasn't a GridView
as expected and hence InvalidCastException
is much more appropriate
The C# Frequently Asked Questions blog covers this in What's the difference between cast syntax and using the as operator?. There is a discussion of the caveats from Andrew Arnott that you might be interested in too.
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