Я рекомендую не использовать тип слова, и вам нужно проанализировать перечисление:
set
{
employeeType = (Type)Enum.Parse(typeof(Type), value);
}
Редактировать: Во-первых, я не могу повторить достаточно, чтобы не использовать слово Type для перечисления ИЛИ строки для возврата свойства.Во-вторых, использование перечислений здесь с switch может привести к неприятностям, но значение по умолчанию может выручить вас.
public enum WorkType
{
Hourly = 1,
Salary = 2,
None = 3
};
// Initialize this to prevent craziness
private WorkType employeeType = WorkType.None;
public string EmployeeType
{
get
{
// I'm not sure why you want to return a string
// in this property but whatevs.
// First make sure that you have a valid enum
if ((int)employeeType > 3 || (int)employeeType < 1)
employeeType = WorkType.None;
return employeeType.ToString(); // Don't need a switch, just call ToString()
}
set
{
// This might be better served with a TryParse. This will
// be more fault tolerant if someone using your class passes
// in an invalid WorkType.
if(!TryParse(typeof(WorkType), value, out employeeType))
employeeType = WorkType.None;
}
}
}
Я подозреваю, что проблема, с которой вы сталкиваетесь при конвертации, заключается в том, что вы используетеприсваивание, которое не является строкой типа:
WorkType someType = WorkType.None;
this.EmployeeType = someType; // Exception is here
Это недопустимый случай, потому что someType является типом, а EmployeeType (value) является строкой.Чтобы исправить это, вам нужно присвоить его с помощью:
this.EmployeeType = someType.ToString();
Все это сводится к довольно глупому, потому что это можно сделать с помощью чего-то простого:
public enum WorkType
{
Hourly = 1,
Salary = 2,
None = 3
};
public WorkType EmployeeType { get; set; }
// Any time you want to access the value of EmployeeType as a string you would
// simply use the following line:
// EmployeeType.ToString();