Casting string to enum
Solution 1
Use Enum.Parse()
.
var content = (ContentEnum)Enum.Parse(typeof(ContentEnum), fileContentMessage);
Solution 2
As an extra, you can take the Enum.Parse
answers already provided and put them in an easy-to-use static method in a helper class.
public static T ParseEnum<T>(string value)
{
return (T)Enum.Parse(typeof(T), value, ignoreCase: true);
}
And use it like so:
{
Content = ParseEnum<ContentEnum>(fileContentMessage);
};
Especially helpful if you have lots of (different) Enums to parse.
Solution 3
.NET 4.0+ has a generic Enum.TryParse
ContentEnum content;
Enum.TryParse(fileContentMessage, out content);
Solution 4
Have a look at using something like
Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object. A parameter specifies whether the operation is case-sensitive. The return value indicates whether the conversion succeeded.
or
Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object.
user1765862
Updated on July 05, 2022Comments
-
user1765862 almost 2 years
I'm reading file content and take string at exact location like this
string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);
Output will always be either
Ok
orErr
On the other side I have
MyObject
which haveContentEnum
like thispublic class MyObject { public enum ContentEnum { Ok = 1, Err = 2 }; public ContentEnum Content { get; set; } }
Now, on the client side I want to use code like this (to cast my string
fileContentMessage
toContent
property)string fileContentMessage = File.ReadAllText(filename).Substring(411, 3); MyObject myObj = new MyObject () { Content = /// ///, };
-
Matthias Meid over 11 years
Enum.Parse
returns anobject
which needs to be casted. I felt free to edit :) -
John Suit over 9 yearsPerfect, a one-line solution. Thanks! This saves me from writing another method to handle it.
-
Colin over 7 yearsThanks for the ignoreCase: true tidbit!
-
John Demetriou almost 7 yearsI tried with Parity Enum and when I give the string value of 123 it returns it without issue, even though Parity enum does not include 123 value of enum
-
CodeCaster almost 7 years@JohnDemetriou that's documented: "If value is the string representation of an integer that does not represent an underlying value of the enumType 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 enumType".
-
John Demetriou almost 7 years@CodeCaster thx