进一步my previous question,我现在遇到一个新问题,我想获得一个属性为数组的属性:
string propertyName="DisplayLayout.Bands[0].Columns";
PropertyInfo pi = control.GetType().GetProperty(propertyName)
但实际上,它返回null。
最诚挚的问候,
弗洛里安 编辑:抱歉缺乏精确度:$我访问Bands属性感谢我的问题的答案。我真正的问题是访问'Columns'属性,这是'Band'类型的属性。我希望它更清楚。
EDIT2:这是一个例子:
PropertyInfo t = control.GetType().GetProperty(entry.Value[i].Nom.Split(new char[] { '.' })[0]);
PropertyInfo property = control.GetType().GetProperty(entry.Value[i].Nom.Split(new char[] { '.' })[0]);
PropertyInfo nestedProperty = property.PropertyType.GetProperty("Bands");
在nestedProperty中我有Bands(Infragistics.UltraWinGrid.BandsCollection Bands),但我无法访问Bands [0]和'Column'属性
答案 0 :(得分:3)
当您引用某个实例的类型时,您将只能“反射”访问所述类型的方法,属性等。
因此,不支持点符号,因为您基本上触及3种类型,一些控件,一些Band和Band实例的集合。
换句话说,您可以向控件询问属性“Bands”或属性“Columns”的“Band”类型,但不能使用点符号。
答案 1 :(得分:2)
你走得太快了。这里有三种类型和三种属性,你需要使用GetType和GetProperty三次。
答案 2 :(得分:1)
语法Bands[0]
是indexer访问权限。索引器是一个带参数的属性。 C#不允许通过名称访问带参数的属性,但允许使用与DefaultMemberAttribute类型类型中给出的名称匹配的属性的索引器语法。要在示例中获取索引器的PropertyInfo
,您可以编写:
PropertyInfo nestedProperty = property.PropertyType.GetProperty("Bands");
var defaultMember = (DefaultMemberAttribute)Attribute.GetCustomAttribute(nestedProperty.PropertyType, typeof(DefaultMemberAttribute));
var nestedIndexer = nestedProperty.PropertyType.GetProperty(defaultMember.MemberName);
为了从索引器获取值,您需要向PropertyInfo.GetValue提供第二个参数,并传入要传入的值:
var value = nestedIndexer.GetValue(bands, new object[] { 0 });