c# Casting v As operator
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
B. I don't like to rely on exceptions for normal processing (they are slow and clumsy for that), so you have to check for null.
SomeObject obj = e as SomeObject;
if (obj != null)
{
...
}While
if (e != null && e is SomeObject)
{
SomeObject obj = (SomeObject) e;
...
}looks ugly. Plus, if you are going to use
obj
as aSomeObject
instance, then the former is quicker since there is only one check on the type ofe
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together. Manfred R. Bihy: "Looks as if OP is learning resistant."
-
It depends. (A) will throw if the cast fails while (B) will evaluate to
null
if the cast fails. I use both depending on how I intend to handle the casting failure. /raviMy new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
Not your name, your sig:
W∴ Balboos wrote:
Possibly a font-problem on your end?
It looks roughly like: W**.'.** Balboos - the three punctuation-like characters being the HTML character code:& there4;
(space put in after & so it doesn't render)"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"As far as we know, our computer has never had an undetected error." - Weisert
"If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010
There's a lot of white space...
Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
He's doin it on purpose to annoy you Senhor Vilmos. I thought you would have figured that out by now :D
Und wenn du lange in einen abgrund blickst, blickt der Abgrund auch in dich hinein.
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
It is not about preference. When I want an exception in case of type error I use A., and if I want a null I use B. I don't see a point of something like:
SomeObj obj = e as SomeObject;
if (obj == null)
throw new InvalidCastException();Of course, in good languages casting is almost always a sign of a design error.
-
If an illegal cast is an exceptional (woah, that should never happen) situation, then (a) If there's a possibility that through normal use the cast might be invalid (e.g. Plug-in tpye code), then (b), followed by an If to check for Null. -Richard
Hit any user to continue.
Richard A. Dalton wrote:
Plug-in tpye code
I don't have such problems with plug-ins.
-
B. I don't like to rely on exceptions for normal processing (they are slow and clumsy for that), so you have to check for null.
SomeObject obj = e as SomeObject;
if (obj != null)
{
...
}While
if (e != null && e is SomeObject)
{
SomeObject obj = (SomeObject) e;
...
}looks ugly. Plus, if you are going to use
obj
as aSomeObject
instance, then the former is quicker since there is only one check on the type ofe
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together. Manfred R. Bihy: "Looks as if OP is learning resistant."
OriginalGriff wrote:
(they are slow and clumsy for that
No they're not.
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
I used to use A (C upbringing) now I kinda favor B.
I Haven't Gone To Bed With Any Ugly Women, but I've Sure Woke Up With A Few.
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
Depends on the situation. Mostly proper casting,
as
occasionally, particularly when checking for a derived type. -
:beer:
www.software-kinetics.co.uk Wear a hard hat it's under construction
Don't mind if I do. :beer: yourself.
Panic, Chaos, Destruction. My work here is done. Drink. Get drunk. Fall over - P O'H OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
-
The hand is quicker than the I eye.
www.software-kinetics.co.uk Wear a hard hat it's under construction
Norm .net wrote:
The hand is quicker than the I eye
Too much hand is bad for the eye.
Und wenn du lange in einen abgrund blickst, blickt der Abgrund auch in dich hinein.
-
It is not about preference. When I want an exception in case of type error I use A., and if I want a null I use B. I don't see a point of something like:
SomeObj obj = e as SomeObject;
if (obj == null)
throw new InvalidCastException();Of course, in good languages casting is almost always a sign of a design error.
I use A and never get an Exception, what are you people doing? :confused:
-
I use A and never get an Exception, what are you people doing? :confused:
PIEBALDconsult wrote:
what are you people doing?
SomeType obj = (SomeType)BloatedUglyUnreadableFrameworkFactory.CreateObject(someXMLStringThatIHopeWorksSometimesButNeverKnowForSure);
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
As is for poor programmers. If you know that e always is SomeObject then e should be typed as such using some other method. Otherwise you always have to check the result of the as operation. So then you have the following two scenarios which must always be in case A or case B:
if(e is SomeObject){
SomeObject someObject = (SomeObject)e;
}or
SomeObject someobject = e as SomeObject;
if(someObject != null){}
But then in case by I always here the response ... but I know e is always SomeObject. Really then maybe it should be defined as such. The AS operator is designed solely to support developers that don't have a fundamental concept of type. After all, for all of the time I have seen the is operator used with a subsequent cast, checking for null after the AS is a white rhinoceros.
Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost
-
For those using c#, what do you prefer? A.
SomeObject obj = (SomeObject) e;
or B.
SomeObject obj = e as SomeObject;
www.software-kinetics.co.uk Wear a hard hat it's under construction
The first when I need the exception, the second when I need the null. Because face it, e is never what you need it to be.
FILETIME to time_t
| FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchy -
As is for poor programmers. If you know that e always is SomeObject then e should be typed as such using some other method. Otherwise you always have to check the result of the as operation. So then you have the following two scenarios which must always be in case A or case B:
if(e is SomeObject){
SomeObject someObject = (SomeObject)e;
}or
SomeObject someobject = e as SomeObject;
if(someObject != null){}
But then in case by I always here the response ... but I know e is always SomeObject. Really then maybe it should be defined as such. The AS operator is designed solely to support developers that don't have a fundamental concept of type. After all, for all of the time I have seen the is operator used with a subsequent cast, checking for null after the AS is a white rhinoceros.
Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost
Thanks Ennis - I'm a poor programmer then because I use
as
, rather than the double cast, which is doing the same work again. What happens internally withas
is that it checks to see if the variable is of the type, and if it is it returns a non-null pointer to that type. With theis
operator, you check to see if it is of the type and then you cast it - which still determines internally whether or not it belongs to that type (this is how it throws anInvalidTypeException
). In any case where you are using code-discovery, such as IoC, then theas
call is more efficient. [Edit]I should add that this relates to our plugin code where the client provides their own logic, and "forgets" to implement the appropriate interfaces.[/Edit]Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
modified on Thursday, June 23, 2011 9:30 AM
-
Richard A. Dalton wrote:
Plug-in tpye code
I don't have such problems with plug-ins.
You have better clients than we do then. You tell them, you must implement this interface in order for this to work, and bam they completely fail to implement the interface.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
-
The first when I need the exception, the second when I need the null. Because face it, e is never what you need it to be.
FILETIME to time_t
| FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchy -
Don't fancy seeing your code if you think b. looks like a great ape :rolleyes:
www.software-kinetics.co.uk Wear a hard hat it's under construction
Somebody didn't read the subject of the post.
Und wenn du lange in einen abgrund blickst, blickt der Abgrund auch in dich hinein.
-
PIEBALDconsult wrote:
what are you people doing?
SomeType obj = (SomeType)BloatedUglyUnreadableFrameworkFactory.CreateObject(someXMLStringThatIHopeWorksSometimesButNeverKnowForSure);
You've been reading java code on the throne again haven't you? :)
¡El diablo está en mis pantalones! ¡Mire, mire! SELECT * FROM User WHERE Clue > 0 0 rows returned Save an Orange - Use the VCF! Personal 3D projects Just Say No to Web 2 Point Blow
-
Somebody didn't read the subject of the post.
Und wenn du lange in einen abgrund blickst, blickt der Abgrund auch in dich hinein.
:wtf: are you going on about.
www.software-kinetics.co.uk Wear a hard hat it's under construction