我正在编写一些代码以从数据库读取值并将其转换为对象。
我的对象有一些成员,其类型是自定义定义的枚举。
我正在尝试类似的事情,以便将字符串变量转换为枚举:
var castTo = fieldInfo.PropertyType.GetType(); //returns a Type object, e.g. MyEnum
var parsedEnum = (castTo) Enum.Parse(castTo, valueFromSql);
问题在于编译器不会接受包含Type对象的变量。
如果不是使用castTo变量,而是使用枚举名称,则没有问题,但是需要在运行时定义它。
最佳答案
您可以尝试:
var castTo = fieldInfo.PropertyType.GetType();
var parsedEnum = Convert.ChangeType(Enum.Parse(castTo, valueFromSql), castTo);
有关更改类型的更多信息,请参见:https://msdn.microsoft.com/en-us/library/system.convert.changetype(v=vs.110).aspx
对于数据库包含
enum
中不存在的值的情况,也应该有一种解决方法。应用程序将崩溃,因为那时将无法进行投射。