【问题标题】:Get property value and convert class type to boolean获取属性值并将类类型转换为布尔值
【发布时间】:2015-11-11 10:08:57
【问题描述】:

我有以下代码:

 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 访问它。这可行,但我崩溃了,因为该属性具有返回值布尔值。

谢谢!

【问题讨论】:

  • 老实说,我什么都不懂。您能否尝试重新表述您的问题,以便其他人都能理解您的问题? :)
  • 好的,我试过了:)对不起!

标签: c# reflection properties getvalue


【解决方案1】:

你得到了T类型的属性,返回值也应该是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);
}

请看&lt;BaseClass&gt;&lt;bool&gt;typeof(T).GetPropertyobj.GetType().GetProperty的变化。

【讨论】:

  • 这不起作用,因为我在字段中得到一个空值。我必须直接访问 BaseClass。
  • @Jackson30 哦,当然。 GetProperty 将无法识别基本类型。对不起。我更改了代码。
  • 我把它改成了:return (bool) field.GetValue(obj, null); - 这工作正常吗?
  • @Jackson30 ???如果您只访问布尔值,那确实有效。我的方法也应该适用于其他所有类型。但是,是的,它适用于您的情况。您唯一需要做的就是将GetPrivateProperty 的返回值从T 更改为bool。
  • 做到了。现在它工作正常!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2023-02-11
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多