关于C#Reflection :根据“属性数据类型”转换返回的属性值

Reflection : Convert the returned property value based on Property Data Type

本问题已经有最佳答案,请猛点这里访问。

第一个问题不重复。

公共类样本{public vehicleenum关键字get;set;}

1
public enum VehicleEnum { CAR = 0 , BIKE = 1 };
1
2
object modelObject = Activator.CreateInstance("ModelAssembly","ModelAssembly.Sample");
object propValue = modelObject.GetType().GetProperty("Keyword").GetValue(modelObject);
  • 是否有任何方法返回字符串数据类型中的值(即"car")。
  • 是否仍有将枚举值列表作为字符串列表(不仅是指定值)的方法,即在这种情况下,"car"、"bike"
  • 回答第一个问题。-)使用ObjectHandle和Unwrap对象代替对象。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        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
    3
    4
    5
    6
    7
            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());


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

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