What's the difference using a cast or C#'s 'as' [modified]
-
Hi: I see in lots of sample code something like this:
Customer customer = (Customer)e.NewObject;
but I always prefer:
Customer customer = e.NewObject as Customer;
I can then test for 'customer' being null, but is there and *real* difference of performance hit?
--- Regards, Martin.
modified on Monday, November 24, 2008 4:53 AM
throw new ProgrammingQuestionInLoungeException();
But I'll give you a hint - write a loop and test each method 1000 times. Time it with a
Stopwatch
. In a managed language all your assumptions about performance are irrelevant, the JIT compiler may be optimising stuff all over the place. Make sure your running your test in release mode.Simon
-
Proximity to Programming Question Alert!
My new favourite phrase - "misdirected leisure activity"
-
throw new ProgrammingQuestionInLoungeException();
But I'll give you a hint - write a loop and test each method 1000 times. Time it with a
Stopwatch
. In a managed language all your assumptions about performance are irrelevant, the JIT compiler may be optimising stuff all over the place. Make sure your running your test in release mode.Simon
Ouch!! I seem to have trodden on someones toes :sigh: It was meant to be rhetorical and to see what users preffered and why, not a technical (try timing it!) question. Oh well, I thouhjt it was interesting...
--- Regards, Martin.
-
Ouch!! I seem to have trodden on someones toes :sigh: It was meant to be rhetorical and to see what users preffered and why, not a technical (try timing it!) question. Oh well, I thouhjt it was interesting...
--- Regards, Martin.
'as' is used when the instance you are checking may not of the expected type. E.g Your expecting an 'object' but want it to be a specific type (or maybe one of many types) for a function parameter but the caller may pass in a type you dont want or expect, so you can treat is as null by casting it with the as keyword. An example of this may be when overriding the Equals method on System.Object The () cast method is more effecient becuase as compiles down to a set of IL instructions that include checking the type before attempting the cast, or returning null, eg:
Customer customer = null;
if(e.SomeObject is Customer)
customer = (Customer)e.SomeObject;
else
customer = null;So, I would say 'as' has its place, but its not a replacement for a () cast. Its probably used by certain people becuase they consider it easier to read, rather than actually need to use it. James
James Simpson Web Developer imebgo@hotmail.com P S - This is what part of the alphabet would look like if Q and R were eliminated
Mitch Hedberg -
Hi: I see in lots of sample code something like this:
Customer customer = (Customer)e.NewObject;
but I always prefer:
Customer customer = e.NewObject as Customer;
I can then test for 'customer' being null, but is there and *real* difference of performance hit?
--- Regards, Martin.
modified on Monday, November 24, 2008 4:53 AM
I'm going to move this to the C# forum, but first an answer: Do
MyObject thing = new MyObject();
// 1.
MyOtherObject otherThing = thing as MyOtherObject;// 2.
MyOtherObject otherThing = (MyOtherObject) thing;1 will have otherThing == null. 2 will throw an exception. 1 allows you (in conjunction with
is
to write safe, polite code that handles bad casts intelligently. 2 just barfs on the carpet like a mangy cat.cheers, Chris Maunder
CodeProject.com : C++ MVP
-
Ouch!! I seem to have trodden on someones toes :sigh: It was meant to be rhetorical and to see what users preffered and why, not a technical (try timing it!) question. Oh well, I thouhjt it was interesting...
--- Regards, Martin.
Sorry if I read it wrong, it just seemed like a I can't be bothered to figure it out myself kind of question. (We get a lot of them around here) No offence intended. :) I cast if I know that the type is right, but us 'as' if I need to check. At a guess, I would say the casting is faster if it works, but slower if it throws an exception because it fails. But like I said before, with managed languages all guesses are off really. The only way that you can be certain about it is to test it.
Simon
-
'as' is used when the instance you are checking may not of the expected type. E.g Your expecting an 'object' but want it to be a specific type (or maybe one of many types) for a function parameter but the caller may pass in a type you dont want or expect, so you can treat is as null by casting it with the as keyword. An example of this may be when overriding the Equals method on System.Object The () cast method is more effecient becuase as compiles down to a set of IL instructions that include checking the type before attempting the cast, or returning null, eg:
Customer customer = null;
if(e.SomeObject is Customer)
customer = (Customer)e.SomeObject;
else
customer = null;So, I would say 'as' has its place, but its not a replacement for a () cast. Its probably used by certain people becuase they consider it easier to read, rather than actually need to use it. James
James Simpson Web Developer imebgo@hotmail.com P S - This is what part of the alphabet would look like if Q and R were eliminated
Mitch HedbergJames Simpson wrote:
The () cast method is more effecient becuase as compiles down to a set of IL instructions that include checking the type before attempting the cast, or returning null, eg:
A cast doesn't perform checks or return null. A cast will throw an InvalidCastException if the types aren't castable.
Simon
-
James Simpson wrote:
The () cast method is more effecient becuase as compiles down to a set of IL instructions that include checking the type before attempting the cast, or returning null, eg:
A cast doesn't perform checks or return null. A cast will throw an InvalidCastException if the types aren't castable.
Simon
the 'as' cast compiles down to the 'is' check
James Simpson Web Developer imebgo@hotmail.com P S - This is what part of the alphabet would look like if Q and R were eliminated
Mitch Hedberg -
the 'as' cast compiles down to the 'is' check
James Simpson Web Developer imebgo@hotmail.com P S - This is what part of the alphabet would look like if Q and R were eliminated
Mitch HedbergAhh...It's confusing talking about keywords like 'as' that appear naturally in sentences. :laugh:
Simon
-
Sorry if I read it wrong, it just seemed like a I can't be bothered to figure it out myself kind of question. (We get a lot of them around here) No offence intended. :) I cast if I know that the type is right, but us 'as' if I need to check. At a guess, I would say the casting is faster if it works, but slower if it throws an exception because it fails. But like I said before, with managed languages all guesses are off really. The only way that you can be certain about it is to test it.
Simon
Simon: Certainly, no offence taken :-D What's more I liked the answer you gave, very informative: Thanks.
--- Regards, Martin.