簡體   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