将字符串转换为枚举,但枚举类型仅在运行时已知

时间:2016-12-22 08:15:46

标签: c# enums casting

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

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

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

var castTo = fieldInfo.PropertyType.GetType(); //returns a Type object, e.g. MyEnum
var parsedEnum = (castTo) Enum.Parse(castTo, valueFromSql);

问题是编译器不会接受包含Type对象的变量。

如果我使用枚举名称而不是castTo变量,则没有问题,但是需要在运行时定义它。

1 个答案:

答案 0 :(得分:2)

你可以尝试:

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