繁体   English   中英

C#反射=&gt;列表的索引项的PropertyInfo(例如obj1.List <obj3> [0])

[英]C# Reflexion => PropertyInfo of indexed item of list (like obj1.List<obj3>[0])

我做了一个循环对象的方法,并返回他每个属性的PropertyInfo。

除了列表中的对象类型之外,所有其他都可以。

我需要返回列表中第一个(或下一个)对象的PropertyInfo;

例如,如果我将参数“ obj1.MyList [0]”放到我的方法中,它将返回obj3的PropertyInfo,因为MyList是类型“ List”的属性。

        /// <summary>Récupère les meta-information de la propriétés "pPropertyName".</summary>
    /// <returns>Item1=PropertyInfo, Item2=ObjetParent, Item3=ValeurDeLaPropriété</returns>
    public static Tuple<PropertyInfo, object, object> GetPiByName(object pObj, string pPropertyName) {
        PropertyInfo pi = null;
        object val = pObj;
        object valParent = null;
        Type currentType = val.GetType();
        var idx = -1;
        foreach (string propertyName in pPropertyName.Split('.')) {
            var posi = propertyName.IndexOf('[');
            if ((posi>0) && int.TryParse(propertyName.Substring(posi + 1, propertyName.Length - propertyName.IndexOf(']')), out idx)) {
                pi = currentType.GetProperty(propertyName.Substring(0, posi));
                currentType = pi.PropertyType;
                valParent = val;
                val = pi.GetValue(val, null);
                if ((val is IEnumerable) && (idx >= 0)) { // Pour les listes
                    valParent = val;
                    val = ((IList)val)[idx];
                    currentType = val.GetType();
                    pi = ??? [WHAT DO I PUT FOR RETURN PropertyInfo OF VAL] ???
                    idx = -1;
                    continue;
                } // */
            } else
                pi = currentType.GetProperty(propertyName);
            currentType = pi.PropertyType;
            valParent = val;
            val = pi.GetValue(val, null);
        }
        return new Tuple<PropertyInfo, object, object>(pi, valParent, val);
    }

问候

我很确定您不能将列表的第3个元素定义为属性。

来自: https : //msdn.microsoft.com/zh-cn/library/x9fsa0sw.aspx

属性是提供灵活机制以读取,写入或计算私有字段的值的成员。 可以将属性当作公共数据成员使用,但实际上它们是称为访问器的特殊方法。 这使数据易于访问,并且仍然有助于提高方法的安全性和灵活性。

您能解释一下您需要什么吗?

obj1.MyList[0]不是指一个属性-它指的是评估索引属性的吸气剂的结果MyList带有参数0

语法a.prop[0]只是a.prop.get_Item(0) C#语法糖,其中get_Item是编译器为索引器属性生成的getter方法。

您要实现的目标仅比要求int.Parse("123")MethodInfo有效-您可以采用int.ParseMethodInfo ,而不能采用int.Parse("123")MethodInfo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM