【问题标题】:Get value from a generic object property by reflection通过反射从通用对象属性中获取值
【发布时间】:2011-05-17 04:40:58
【问题描述】:

我只想从通用属性的所有域对象中获取主要标识符。
到现在为止的代码:

IEnumerable<PropertyInfo> customProperties = genericObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

foreach (PropertyInfo justAuditElementProperties in customProperties) {

    IEnumerable<PropertyInfo> elementsToAudit = justAuditElementProperties.PropertyType.GetProperties().Where(p => Attribute.IsDefined(p, typeof (AuditeAttribute)));
    foreach (PropertyInfo element in elementsToAudit) {
        string name = justAuditElementProperties.PropertyType.FullName + "." + element.Name;
        string value = element.GetValue( ? , null).ToString();
        atributoNomeValor.Add(name, value);
    }
}

的正确替换是什么?

-- 所以重要的是要说每个主要标识符都有[Audite]属性

编辑
的类型?是genericObject 的Property 的类型。示例:
部门是genericObject。
经理是财产。 所以在这种情况下,我想要element.GetValue( ? , null).ToString();,其中该元素在 Manager 类中声明为:

 [Audite]
 public string name { get; set; }

解决方案
这使用来自@liho1eye 的解决方案,我只是添加了一个空引用验证,这给我带来了一些问题。

var propertyParent = justAuditElementProperties.GetValue(genericObject, null);
string value = propertyParent != null ? element.GetValue(propertyParent, null).ToString() : "";

【问题讨论】:

    标签: c# generics reflection


    【解决方案1】:

    那将是你的对象的实例

    string value = element.GetValue(justAuditElementProperties.GetValue(genericObject, null), null).ToString();
    

    【讨论】:

    • 您刚刚添加了一层嵌套。问题与解决方案完全相同
    • 但是你同意genericObejct的一个属性的类型不是同一个类型。我试过你的解决方案,我收到类型不匹配的错误
    • 我已经给你完整的答案了。除非您的问题是错误的或不完整的,否则这应该有效。作为旁注,查看PropertyInfo.GetValue() 的签名应该足以让您弄清楚要放什么...您要获取的值的对象实例。
    • 伙计,我不能说我现在有多闪耀(和快乐)!为了解决这个问题并阅读大量博客,我基本上失去了一天的生命。但一切都是关于一个不完整的沙盒!该属性是无效的。好吧,让我们继续前进。
    【解决方案2】:

    应该是你的genericObject

    据我所知,您仅通过 genericObject 的属性进行迭代。识别具有“AuditeAttribute”的属性,然后获取它的值。

    查看MSDN了解完整详情

    【讨论】:

    • 没有。我想选择该属性,然后选择该属性的标识符。所以类型不是 os 泛型对象,是的类型 o 的某些属性。一种烦人
    • @Custodio 我的意思是您的示例中第一条语句中的 genericObject 变量。
    • 我明白了。但我试过这个。但是我遇到了一些错误,例如类型不匹配。是的,打字机是不同的。我将编辑问题以更好地解释。
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多