反射:根据属性数据类型转换返回的属性值

时间:2015-08-13 10:01:41

标签: c# reflection

第一个问题不重复。

公共类示例     {       public VehicleEnum Keyword {get; set;}     }

public enum VehicleEnum { CAR = 0 , BIKE = 1 };
object modelObject = Activator.CreateInstance("ModelAssembly", "ModelAssembly.Sample");
object propValue = modelObject.GetType().GetProperty("Keyword").GetValue(modelObject);
  1. 有没有办法在字符串数据类型中返回值(即“Car”)。
  2. 无论如何都要将枚举值列表作为字符串列表(不仅是赋值),即在这种情况下,{“CAR”,“BIKE”}
  3. 回答第一个问题。 : - ) 使用ObjectHandle并展开对象,而不是对象。

        ObjectHandle modelObject = Activator.CreateInstance("ModelAssembly","ModelAssembly.Sample");
     if (modelObject != null)
                {
                    PropertyInfo memInfo = modelObject.Unwrap().GetType().GetProperty("Keyword", BindingFlags.Public | BindingFlags.Instance);
                    if (memInfo != null)
                    {
                        object value = memInfo.GetValue(modelObject.Unwrap());
                        if (value != null)
                            propertyValue = value.ToString();
                    }
                }      
    
    1. 同样适用于第二个问题,并已在这篇文章中得到解答。

2 个答案:

答案 0 :(得分:1)

        var property = modelObject.GetType().GetProperty("Keyword");
        var propValue = property.GetValue(modelObject);

        foreach (var s in Enum.GetNames(property.PropertyType))
            Console.WriteLine(s);

        Console.WriteLine(propValue.ToString());

答案 1 :(得分:-1)

您可以使用Convert.ChangeType(object, Type)转换为任何所需类型,但如果您只对字符串类型感兴趣,则可以始终使用object.ToString()

要访问枚举的字符串表示形式,请使用Enum.GetNames(Type)