我很难通过TypeDescriptor获取有关对象索引器的信息-可以肯定的是,我的意思是:

class ComponentWithIndexer
{
    public string this[int i]
    {
        get { return "hello"; }
    }
}

由于您可以通过自定义Typedescriptor来影响WPF中的Binding,并且可以在WPF中与索引器绑定(bind)(例如{Binding [12]),因此我想知道有关Indexers的信息是否也可以通过Type描述符获得。
那么,信息隐藏在哪里,如果没有隐藏在哪里,则针对索引器的WPF绑定(bind)如何工作?

最佳答案

简短的回答,不-您无法通过TypeDescriptor获得索引器

更长的答案-为什么不能-深入到TypeDescriptor mess-o-class的肠子中,有一个反射性的调用来聚合GetProperties调用的属性。里面有这段代码:

for (int i = 0; i < properties.Length; i++)
{
    PropertyInfo propInfo = properties[i];
    if (propInfo.GetIndexParameters().Length <= 0)
    {
        MethodInfo getMethod = propInfo.GetGetMethod();
        MethodInfo setMethod = propInfo.GetSetMethod();
        string name = propInfo.Name;
        if (getMethod != null)
        {
            sourceArray[length++] = new ReflectPropertyDescriptor(type, name, propInfo.PropertyType, propInfo, getMethod, setMethod, null);
        }
    }
}

重要的部分是检查0索引参数-如果它有一个索引器,它将跳过它。 :(

09-11 19:56