![](/img/trans.png)
[英]How do you create an array-like C# constructor that will allow “new MyClass() { obj1, obj2, obj3 };”
[英]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.Parse
的MethodInfo
,而不能采用int.Parse("123")
的MethodInfo
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.