2011-02-10 41 views

cevap

6

Ben PropertyInfo.GetIndexParameters kullanmayı tercih:

var indexers = targetType.GetProperties(bindingFlags) 
         .Where(p => p.GetIndexParameters().Any()); 
         .Select(p => p.GetGetMethod()); 

Şimdi indexersbindingFlags 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.

+0

Ben MethodInfo değil PropertyInfo istiyorum. – smartcaveman

+0

@smartcaveman: Vay. Yukarıda verdiğim şey için PropertyInfo.GetGetMethod özelliğini kullanın. – jason

2

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.

+0

Bunun için herhangi bir dokümanınız var mı? Onu hiç bir yerde bulamıyorum. – smartcaveman

+0

MSDN, VB.NET Varsayılan anahtar sözcüğü ve DefaultMemberAttribute sınıfına bakın. –