0

我有以下代码:

 ClassName class = new ClassName();

 var getValue = GetPrivateProperty<BaseClass>(class, "BoolProperty");

 public static T GetPrivateProperty<T>(object obj, string name)
    {
        BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
        PropertyInfo field = typeof(T).GetProperty(name, flags);
        return (T)field.GetValue(obj, null);
    }

现在,当我在返回语句中收到 InvalidCastException 时,他无法将 System.Boolean 类型的对象转换为 ClassName 类型。BaseClass 有这个属性。ClassName 继承自 BaseClass。必须访问“ClassName”类的所有属性。由于这个属性是私有的,我必须直接通过 BaseClass 访问它。这可行,但我崩溃了,因为该属性具有返回值布尔值。

谢谢!

4

1 回答 1

1

你得到了 type 的属性,T返回值也应该是 type T?我不相信。

也许这会有所帮助:

var getValue = GetPrivateProperty<bool>(class, "BoolProperty");

public static T GetPrivateProperty<T>(object obj, string name)
{
    BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
    PropertyInfo field = null;
    var objType = obj.GetType();
    while (objType != null && field == null)
    {
        field = objType.GetProperty(name, flags);
        objType = objType.BaseType;
    }

    return (T)field.GetValue(obj, null);
}

请查看<BaseClass>to<bool>typeof(T).GetPropertyto的变化obj.GetType().GetProperty

于 2015-11-11T10:11:49.173 回答