C# 反射 => 列表索引项的属性信息(如 obj1.列表<obj3>[0])



我创建了一个循环对象的方法,并返回他每个属性的 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);
    }

问候

obj1.MyList[0] 不引用属性 - 它引用使用参数0 MyList计算索引器属性的 getter 的结果。

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

你想要实现的目标并不比要求int.Parse("123") MethodInfo更有效——你可以接受int.Parse MethodInfo,但不能接受int.Parse("123")

我很

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

寄件人: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

属性是提供灵活机制来读取的成员, 写入或计算私有字段的值。可以使用属性 好像他们是公共数据成员,但实际上他们很特殊 称为访问器的方法。这使得数据能够轻松访问和 仍然有助于提高方法的安全性和灵活性。

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

相关内容

  • 没有找到相关文章

最新更新