A better way to parse enums



  • We all know and love the methods that the .net framework provides for working with enumerations... things like Enum.Parse(), etc etc. While traversing through some of our production code I stumbled across this gem. Its parsing methods far surpass anything that the Enum.Parse() could ever dream of. Knowing the previous developer has a knack for the desire to write his own snippets of code (aka: reinventing the wheel) this came as no surprise:

    <FONT color=#008080 size=2><FONT size=2>

    </FONT><FONT color=#0000ff size=2>private</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>string</FONT><FONT size=2> Guess(</FONT><FONT color=#0000ff size=2>string</FONT><FONT size=2> str)

    {

    </FONT><FONT color=#0000ff size=2>    switch</FONT><FONT size=2> (</FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2>.ToUpper(str[0]))</FONT>

    <FONT size=2> {</FONT>

    <FONT color=#0000ff size=2>c</FONT><FONT color=#0000ff size=2>ase</FONT><FONT size=2> </FONT><FONT color=#800000 size=2>'B'</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#008080 size=2>MyEnum</FONT><FONT size=2>.Between.ToString();

    </FONT><FONT color=#0000ff size=2>case</FONT><FONT size=2> </FONT><FONT color=#800000 size=2>'O'</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#008080 size=2>MyEnum</FONT><FONT size=2>.Outside.ToString();

    </FONT><FONT color=#0000ff size=2>case</FONT><FONT size=2> </FONT><FONT color=#800000 size=2>'E'</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#008080 size=2>MyEnum</FONT><FONT size=2>.Equal.ToString();

    </FONT><FONT color=#0000ff size=2>case</FONT><FONT size=2> </FONT><FONT color=#800000 size=2>'L'</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#008080 size=2>MyEnum</FONT><FONT size=2>.LessThan.ToString();

    </FONT><FONT color=#0000ff size=2>case</FONT><FONT size=2> </FONT><FONT color=#800000 size=2>'G'</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#008080 size=2>MyEnum</FONT><FONT size=2>.GreaterThan.ToString();

    </FONT><FONT color=#0000ff size=2>default</FONT><FONT size=2>:

    </FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>null</FONT><FONT size=2>;

    }

    }

    </FONT></FONT><FONT size=2></FONT>


  • It appears to do a little more than just parse an Enum, as its return value is a string. However, what is an expected input to this function? And a lovely name for the function by the way.



  • The funny thing about it... it is parsing a field from a file and then passing that entry into the Guess method...

    so its taking a string.... comparing that to the first character and if it matches then it returns the enumeration value ToString()... the WTF is that we are limited to a certain number of enumeration values.

     So we can't use Between and Both or Boseefus as it will always guess that since it starts with 'B' then it MUST be Between.



  • @bradfoje said:

    We all know and love the methods that the .net framework provides for working with enumerations

    I assure you I don't :(



  • @rbowes said:

    @bradfoje said:

    We all know and love the methods that the .net framework provides for working with enumerations

    I assure you I don't :(

    When I was doing a lot of interviewing, we had people fill out a 'self assessment' and rate themselves in several areas.   These rankings even had rough descriptions.  1 = "I've heard of it and read a bit but I haven't used it on a project yet".   3 = "I've worked with this for a while and am comfortable in it".   5 = "I am a world-class expert and could write books on the topic".    When I conducted the interview, I came in with questions keyed to those levels.

    It's was WTFy enough that about 60% of respondants rated themselves as being a 5 in .NET (and several other technologies) after 3 years experience. But not a single one of them knew Enum.Parse().  Not one.     So you're not alone :)

    Generally speaking, they also didn't know what .Dispose() was for...and god help you if you asked them what the relationship between the CLR & a Windows process was. 

    (I also got a contractor sent to me with several years experience who, when I asked him to write me a function to clean up a phone number, looked at it for a few seconds and said "Pass"...sigh)

    It was a long couple months.

    Now I'm depressed.

    -cw



  • @CodeWhisperer said:

    When I was doing a lot of interviewing, ...

    It was a long couple months.

    Now I'm depressed.

    -cw

    Hmm... now you sound like CPound. I start to believe that the four of us are really only one person with a split personality!



  • No, if I was CPound, I'd have complained that they wore tennis shoes and needed haircuts.  I actually care about what candidates know :)

    Ooo...though I guess it's possible that I'm the personality that cares about such things.

    -cw



  • @CodeWhisperer said:

    When I was doing a lot of interviewing, we had people fill out a 'self assessment' and rate themselves in several areas.   These rankings even had rough descriptions.  1 = "I've heard of it and read a bit but I haven't used it on a project yet".   3 = "I've worked with this for a while and am comfortable in it".   5 = "I am a world-class expert and could write books on the topic".    When I conducted the interview, I came in with questions keyed to those levels.

    It's was WTFy enough that about 60% of respondants rated themselves as being a 5 in .NET (and several other technologies) after 3 years experience. But not a single one of them knew Enum.Parse().  Not one.     So you're not alone :)

    Well, that makes me feel better. I would rate myself as a "1" or "2" on .net -- I've heard about it, and I know a few key concepts (or can guess based on my Java skills). And I can take a pretty good guess on what Enum.parse() and .Dispose() do. But the original poster made it sound like something totally obvious that all of us know, but I am reasonably sure that those of us who have never done .net wouldn't. :)


Log in to reply