Enum.TryParse and Enum.IsDefined returns false for char Enums

I have my program as below:

using System;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            char _status = 'C';            
            Console.WriteLine(_status.ToString());            

            if (Enum.IsDefined(typeof(MyStatus), _status.ToString()))
            {
                Console.WriteLine("Yes1");
            }
            else
            {
                Console.WriteLine("No1");
            }

            MyStatus myStatus; 
            if(Enum.TryParse(_status.ToString(), true, out myStatus))
            {
                Console.WriteLine("Yes2");
            }
            else
            {
                Console.WriteLine("No2");
            }
        }

        public enum MyStatus
        {
            None = 'N',
            Done = 'C'
            //Other Enums
        }
    }
}

I am expecting "Yes1" and "Yes2" in my Console, but looks like it is returning false for the TryParse and IsDefined. Any helps are appreciated.

The code can be accessed at http://rextester.com/CSFG46040

Update

This value basically comes from a database and gets mapped to a character field. I also need to get it exposed to the programs which already uses this character field as an Enum. The Enum.IsDefined or Enum.TryParse is just to make sure that I am not getting any other junk characters which would get resolved to None.

Jon Skeet
people
quotationmark

Yes, that's because your enum is effectively:

public enum MyStatus
{
    None = 78,
    Done = 67
}

So "N" is neither the name of an enum value, nor is it the decimal representation. Both "None" and "78" would parse to MyStatus.None, but "N" won't.

It sounds like you quite possibly want a Dictionary<char, MyStatus>. If you want to treat the numeric value of each enum value as a char, you could build that with:

var dictionary = Enum.GetValues(typeof(MyStatus))
                     .Cast<MyStatus>()
                     .ToDictionary(x => (char) x);

people

See more on this question at Stackoverflow