En este momento, no tengo: targetType.GetMethod("get_Item", BindingFlags.Instance)
forma optimizada para conseguir "get_Item" MethodInfo
¿Hay algo mejor?
En este momento, no tengo: targetType.GetMethod("get_Item", BindingFlags.Instance)
forma optimizada para conseguir "get_Item" MethodInfo
¿Hay algo mejor?
Yo prefiero usar PropertyInfo.GetIndexParameters
:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
ahora indexers
es un IEnumerable<MethodInfo>
de los captadores de los indexadores que coinciden con el BindingFlags
especificada dada en bindingFlags
.
Observe cómo se lee el código del targetType
, obtenga las propiedades que coincidan con bindingFlags
, tome las que son un indexador y luego proyecte en el captador. Es mucho menos misterioso que usar la cadena mágica "get_Item"
, y múltiples indexadores se manejan fácilmente.
Si sabe que solo hay uno, podría usar Single
. Si está buscando uno específico de muchos, puede inspeccionar el resultado de GetIndexParameters
en consecuencia.
La forma correcta es recuperar DefaultItemAttribute para la clase. Tiene el nombre de la propiedad del indexador. No tiene que ser "Artículo", los lenguajes como VB.NET permiten especificar cualquier propiedad para ser el indexador. El código de Jason también les fallará, puede haber más de una propiedad indexada. Pero solo un defecto.
¿Tiene alguna documentación para esto? No puedo encontrarlo por ninguna parte. – smartcaveman
MSDN, observe la palabra clave predeterminada de VB.NET y la clase DefaultMemberAttribute. –
Quiero el MethodInfo, no el PropertyInfo. – smartcaveman
@smartcaveman: Wow. 'Use PropertyInfo.GetGetMethod' en lo que le he dado arriba. – jason