Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Tagged as

Problem in parsing string value to enum type

, 2 May 2012 CPOL
Rate this:
Please Sign up or sign in to vote.
Today I faced one issue with Enum.TryParse or Enum.Parse method. I was trying to parse string value to Enum but Enum.TryParse/Enum.Parse method was giving always true value for string which is not member of enum. public enum FieldAccessType { ReadOnly = 1, Add = 2, Modify = 4, AddModify = 6 } I want

Today I faced one issue with Enum.TryParse or Enum.Parse method. I was trying to parse string value to Enum but Enum.TryParse/Enum.Parse method was giving always true value for string which is not member of enum.

public enum FieldAccessType
    {
        ReadOnly = 1,
        Add = 2,
        Modify = 4,
        AddModify = 6
    }

I want to convert string value say “30″ to enum type that is not member of enum and conversion shoule be fails but I am always getting true value return enum.TryParse method which is surprising. I don’t know why it is not behaving as per expectation.

 FieldAccessType type;
 bool res=Enum.TryParse("20",out type );
 Assert.IsFalse(res); //test is failing bcoz res is true

I found msdn documentation for Enum.TryParse/Enum.Parse and found following lines:

“If value is the string representation of an integer that does not represent an underlying value of the TEnum enumeration, the method returns an enumeration member whose underlying value is value converted to an integral type. If this behavior is undesirable, call the IsDefined method to ensure that a particular string representation of an integer is actually a member of TEnum.”

Below is code which I corrected after:

FieldAccessType fieldAccessType;
                    int intEnumValue;
                    if (Int32.TryParse(Value, out intEnumValue))
                    {
                        if (Enum.IsDefined(typeof (FieldAccessType), intEnumValue))
                            return (FieldAccessType) intEnumValue;
                    }

Enum.IsDefined to veryify that the value you parsed actually exists in this particular enum.

I hope this trick will help you.


License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Neeraj Kaushik 1980
Architect Initto Technologies India Pvt Ltd
India India
• Technical Architect with 9 years of Application development experience
• Good knowledge and expertise on multiple areas of technologies and their business applications
• Strong experience in high performance and business critical applications.
• Experience in creating framework, Code generators, and UML diagrams.
• Developed messaging framework for Algo Trading, technical analysis tool, market feed client Api, Payment Solutions for SWIFT, Internationalization for Core Banking Solution product etc.
• Practical knowledge of building and practicing agile delivery methodologies (SCRUM & TDD).
• Proven ability in producing technical documentation and presentation to clients.
• Active participation in trainings, article writing & taking initiatives.
• Passion to get knowledge from various resources acquires best practices.
• Good understanding of financial domain especially in investment banking and banking domain.
Specialties
 
Technical Architectures, Multi-threading Architecture, Algo Trading systems, Messaging Framework, FIX Implementation, Technical Analysis & Charting, ActiveMQ, MSMQ, C#, WinForms, ASP.NET MVC, Jquery, WCF, Sql Server 2008, Oracle, TFS, TDD, QuickFix, Open Source Tools & Framework.
Follow on   Twitter

Comments and Discussions

 
Questiondoes not always work that way PinmemberMark Kruger29-May-12 4:07 
AnswerRe: does not always work that way PinmemberNeeraj Kaushik 198029-May-12 5:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.141220.1 | Last Updated 2 May 2012
Article Copyright 2012 by Neeraj Kaushik 1980
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid