是否有可能从PropertyInfo获得“对象”?

时间:2010-07-05 13:23:44

标签: c# reflection system.reflection

在我的precent问题中,我想通过反射检索一些值。 现在我希望通过反射将对象设置为值。

我想写这个:

private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info)
        {
            UltraGrid grille = (UltraGrid)control;
            SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>();

            if (grille != null)
            {
                // I want to write MapPropertyInfo method 
                ColumnsCollection cols = MapPropertyInfo(Info);

PropertyInfo包含一种ColumnsCollection。我只是想将我的PropertyInfo“映射”到一个对象之后定义一些属性:例如:

cols[prop.Nom].Hidden = false;

有可能吗?

最诚挚的问候,

弗洛里安

编辑:我尝试过GenericTypeTea解决方案,但是我遇到了一些问题。这是我的代码片段:

        private void AppliquerColonnesPersonnalisation(Control control, Propriete propriete, PropertyInfo Info)
    {
        UltraGrid grille = (UltraGrid)control;
        ColumnsCollection c = grille.DisplayLayout.Bands[0].Columns;

                    // Throw a not match System.Reflection.TargetException
        ColumnsCollection test = Info.GetValue(c,null) as ColumnsCollection;
        SortedList<int,string> sortedOrderedColumns = new SortedList<int,string>();

但是抛出了TargetException

1 个答案:

答案 0 :(得分:3)

所以你已经拥有一个类型为PropertyInfo的{​​{1}}对象?

您可以使用以下代码获取并修改它:

ColumnsCollection

基本上,您只需要将原始对象传递回var original = GetYourObject(); PropertyInfo Info = GetYourPropertyInfo(original); ColumnsCollection collection = Info.GetValue(original) as ColumnsCollection; 的GetValue方法,该方法将返回一个对象。只需将其转换为PropertyInfo即可进行排序。

<强>更新

根据您的更新,您应该这样做:

ColumnsCollection

您必须从不同类型的对象获取object original = grille.DisplayLayout.Bands[0]; PropertyInfo info = original.GetProperty("Columns"); ColumnsCollection test = info.GetValue(original, null) as ColumnsCollection; Info。虽然我认为我们在这里解决了错误的问题。我不明白你想要实现的目标。为什么不直接修改PropertyInfo