Подтвердить что ты не робот

Строка заливки для перечисления

Я читаю содержимое файла и беру строку в точном месте, подобном этому

 string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

Выход всегда будет либо Ok, либо Err

С другой стороны, у меня есть MyObject, у которых ContentEnum как этот

public class MyObject

    {
      public enum ContentEnum { Ok = 1, Err = 2 };        
      public ContentEnum Content { get; set; }
    }

Теперь, на стороне клиента, я хочу использовать такой код (чтобы передать свойство fileContentMessage Content)

string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

    MyObject myObj = new MyObject ()
    {
       Content = /// ///,
    };
4b9b3361

Ответ 1

Используйте Enum.Parse().

var content = (ContentEnum)Enum.Parse(typeof(ContentEnum), fileContentMessage);

Ответ 2

Посмотрите на использование чего-то вроде

Enum.TryParse

Преобразует строковое представление имени или числового значения одного или более перечислимых констант к эквивалентному перечисляемому объекту. Параметр указывает, является ли операция чувствительной к регистру. возвращаемое значение указывает, удалось ли преобразование.

или

Enum.Parse

Преобразует строковое представление имени или числового значения одного или более перечисляемых констант к эквивалентному перечисляемому объекту.

Ответ 3

В качестве дополнительного вы можете взять уже предоставленные ответы Enum.Parse и поместить их в простой в использовании статический метод в класс-помощник.

public static T ParseEnum<T>(string value)
{
    return (T)Enum.Parse(typeof(T), value, ignoreCase: true);
}

И используйте его так:

{
   Content = ParseEnum<ContentEnum>(fileContentMessage);
};

Особенно полезно, если у вас много (разных) Enums для разбора.

Ответ 4

.NET 4.0+ имеет общий Enum.TryParse

ContentEnum content;
Enum.TryParse(fileContentMessage, out content);