c# - 使用类型变量转换为枚举

标签 c# reflection enums

我的部分软件正在使用反射。我遇到的问题是,虽然我可以获得属性的类型,但我无法使用 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/

相关文章:

c# - 是否可以使用 String.Split 或正则表达式将字符串拆分为字符串数组并删除不在分隔符之间的部分?

c# - token facebook-c#-sdk 的交换代码

c# - 序列化空引用对象

c# - 在 XAML 中使用枚举值

c++ - 如何访问arduino库中的枚举变量

c# - 如何实现用户之间的消息传递系统?

c# - sqldatareader 中的括号

java - 如何检查当前方法的参数是否具有注释并在 Java 中检索该参数值?

java - 通过 Dijkstra 算法中私有(private)方法的 JUnit 测试用例

MySQL Order By 不适用于 Concat(enum)