我的部分软件正在使用反射。我遇到的问题是,虽然我可以获得属性的类型,但我无法使用 PropertyInfo 中的 Type
转换字符串值。这就是我在示例代码中使用 t
的原因。
下面的代码演示了错误消息作为代码注释的问题。语法错误在 t
上。我该如何解决这个问题?谢谢
class Program
{
static void Main(string[] args)
{
Type t = typeof(Letters);
Letters letter = "A".ToEnum<t>(); //-- Type or namespace expected.
}
}
public enum Letters { A, B, C }
//-- This is a copy of the EmunHelper functions from our tools library.
public static class EnumExt
{
public static T ToEnum<T>(this string @string)
{
int tryInt;
if (Int32.TryParse(@string, out tryInt)) return tryInt.ToEnum<T>();
return (T)Enum.Parse(typeof(T), @string);
}
public static T ToEnum<T>(this int @int)
{
return (T)Enum.ToObject(typeof(T), @int);
}
}
解决方案:
以下之所以有效,是因为当使用反射设置值时,会接受 Enum 的实际类型。 myObject.Letter = result
不是。
Type t = currentProperty.PropertyType;
Enum result = Enum.Parse(t, @string) as Enum;
ReflectionHelper.SetProperty(entity, "LetterPropertyName", result);
谢谢大家的帮助。
最佳答案
Enum.Parse(t, @string) as Enum;
这与您发布的解决方案完成了同样的事情。
关于c# - 使用类型变量转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656338/