RE: passing enum value as an argument
- From: "Madestro" <me_no_like_spam_juanDOTromero@bowneDOTcom>
- Date: Wed, 13 Jul 2005 06:45:05 -0700
I am not sure what language you are coding in, but at least in VB.NET you are
incorrect. Here are the TRUE results:
TakeFirstEnum(Foo) --> FAILS
TakeFirstEnum(FirstEnum.Foo) --> SUCCEEDS
TakeSecondEnum(Fred) --> FAILS
TakeSecondEnum(SecondEnum.Fred) --> SUCCEEDS
TakeFirstEnum(Fred) --> FAILS
TakeFirstEnum(SecondEnum.Fred) --> SUCCEEDS
TakeSecondEnum(Foo) --> FAILS
TakeSecondEnum(FirstEnum.Foo) --> SUCCEEDS
Like I said before, ultimately, the enum evaluates to a constant, so there
is really no "type safety" here, except for the type of the constant and the
range of valid values the enum provides. Because of this, I could call the
first function with a value from the second Enum so long as it evaluates to a
value within the range of the first Enum. What I cannot do however is call
one of the values of the Enum without fully qualifying it because once again,
like I said before) you would run into ambiguity problems.
It may not be the case in the language you are using, but it certainly is
the case with VB.NET. Try it, you will see.
--
Juan Romero
-----------------------------------------
The successful person has the habit of doing the things failures don't like
to do.
E.M. Gray
"Jon Skeet [C# MVP]" wrote:
> Madestro <me_no_like_spam_juanDOTromero@bowneDOTcom> wrote:
> > That is exactly the point. I encourage Enums. Going back to the question, the
> > user is trying to use them without fully qualifying them which in turn
> > results in "defeat of the purpose" like I mentioned before.
>
> But it *doesn't* defeat the purpose. It doesn't stop the compiler from
> noticing if he's trying to pass in a value which isn't in the enum. It
> doesn't stop the compiler from noticing if he's trying to pass in a
> value from another enum, whether explicitly or not.
>
> If you had two enums, FirstEnum with values Foo, Bar, Baz and
> SecondEnum with values Fred, George, Harry, and two methods:
>
> TakeFirstEnum (FirstEnum x)
> TakeSecondEnum (SecondEnum y)
>
> then the following would be valid calls:
> TakeFirstEnum(Foo)
> TakeFirstEnum(FirstEnum.Foo)
> TakeSecondEnum(Fred)
> TakeSecondEnum(SecondEnum.Fred)
>
>
> and the following would be invalid calls:
> TakeFirstEnum(Fred)
> TakeFirstEnum(SecondEnum.Fred)
> TakeSecondEnum(Foo)
> TakeSecondEnum(FirstEnum.Foo)
>
> So there's still just as much type safety there as there was before -
> which would *not* be the case if he'd just gone with ints rather than
> enums in the first place. For that reason, I fail to see how it defeats
> the purpose.
>
> The only times it would cause potential for confusion would be where
> there was an overloaded method where the differing parameter types were
> both enums. In that case, the compiler could force the developer to
> explicitly state which enum he wanted to use.
>
> --
> Jon Skeet - <skeet@xxxxxxxxx>
> http://www.pobox.com/~skeet
> If replying to the group, please do not mail me too
>
.
- Follow-Ups:
- RE: passing enum value as an argument
- From: Jon Skeet [C# MVP]
- Re: passing enum value as an argument
- From: Jay B. Harlow [MVP - Outlook]
- RE: passing enum value as an argument
- References:
- passing enum value as an argument
- From: Glenn Venzke
- RE: passing enum value as an argument
- From: Madestro
- RE: passing enum value as an argument
- From: Jon Skeet [C# MVP]
- RE: passing enum value as an argument
- From: Madestro
- RE: passing enum value as an argument
- From: Jon Skeet [C# MVP]
- RE: passing enum value as an argument
- From: Madestro
- RE: passing enum value as an argument
- From: Jon Skeet [C# MVP]
- passing enum value as an argument
- Prev by Date: Re: DataItem.Eval inside <FooterTemplate>
- Next by Date: list box always on top
- Previous by thread: RE: passing enum value as an argument
- Next by thread: Re: passing enum value as an argument
- Index(es):
Relevant Pages
|