almak için bir yol Optimize, ben: targetType.GetMethod("get_Item", BindingFlags.Instance)
Şu anda "Get_Item" MethodInfo
Bundan iyisi var mı?
almak için bir yol Optimize, ben: targetType.GetMethod("get_Item", BindingFlags.Instance)
Şu anda "Get_Item" MethodInfo
Bundan iyisi var mı?
Ben PropertyInfo.GetIndexParameters
kullanmayı tercih:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
Şimdi indexers
bindingFlags
verilen belirtilen BindingFlags
maç Dizinleyicilere ait tutucuların bir IEnumerable<MethodInfo>
olduğunu.
Kodun targetType
'dan nasıl okunduğunu unutmayın, bindingFlags
ile eşleşen özellikleri alın, dizin oluşturucuları alın ve sonra alıcıya yansıtın. Çok daha az gizemli sihirli dize "get_Item"
kullanmaktan daha olduğunu ve birden indexers kolayca işlenir.
sadece bir tane biliyorsanız, tabii Single
kullanabilirsiniz. Birçok belirli bir biri için arıyorsanız, buna göre GetIndexParameters
sonucunu kontrol edilebilmektedir.
Sınıf için DefaultItemAttribute almak için uygun yol. Dizinleyici özelliğinin adı vardır. Bu "Öğe" olmak zorunda değildir, VB.NET gibi dilleri herhangi özelliğini belirterek sağlar dizinleyici olmak. Jason'ın kodu da onlar üzerinde başarısız olacak, birden fazla endeksli özellik olabilir. Ama sadece bir tane varsayılan.
Bunun için herhangi bir dokümanınız var mı? Onu hiç bir yerde bulamıyorum. – smartcaveman
MSDN, VB.NET Varsayılan anahtar sözcüğü ve DefaultMemberAttribute sınıfına bakın. –
Ben MethodInfo değil PropertyInfo istiyorum. – smartcaveman
@smartcaveman: Vay. Yukarıda verdiğim şey için PropertyInfo.GetGetMethod özelliğini kullanın. – jason