我正在编写一些代码以从数据库读取值并将其转换为对象。

我的对象有一些成员,其类型是自定义定义的枚举。

我正在尝试类似的事情,以便将字符串变量转换为枚举:

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中不存在的值的情况,也应该有一种解决方法。应用程序将崩溃,因为那时将无法进行投射。

10-02 02:27