, mam: targetType.GetMethod("get_Item", BindingFlags.Instance)
zoptymalizowany sposób, aby uzyskać prawo teraz "get_Item" MethodInfo
Czy jest coś lepszego?
, mam: targetType.GetMethod("get_Item", BindingFlags.Instance)
zoptymalizowany sposób, aby uzyskać prawo teraz "get_Item" MethodInfo
Czy jest coś lepszego?
wolę używać PropertyInfo.GetIndexParameters
:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
Teraz indexers
jest IEnumerable<MethodInfo>
z pobierające tych indeksujących pasujących do określonego BindingFlags
podane w bindingFlags
.
Zobacz, jak kod brzmi jak z targetType
, uzyskaj właściwości, które pasują do bindingFlags
, weź te, które są indeksem, a następnie rzutuj na gettera. Jest o wiele mniej tajemniczy niż użycie magicznej struny "get_Item"
, a wiele indeksatorów jest łatwo obsługiwanych.
Jeśli wiesz, że jest tylko jeden, możesz oczywiście użyć Single
. Jeśli szukasz konkretnego jednego z wielu, możesz sprawdzić wynik odpowiednio GetIndexParameters
.
Właściwym sposobem jest pobranie DefaultItemAttribute dla klasy. Ma nazwę właściwości indeksera. Nie musi to być "pozycja", a języki takie jak VB.NET umożliwiają określenie dowolnej właściwości jako indekser. Kod Jason również zawiedzie, może być więcej niż jedna własność indeksowana. Ale tylko jeden domyślny.
Czy posiadasz dokumentację do tego? Nie mogę go nigdzie znaleźć. – smartcaveman
MSDN, spójrz na słowo kluczowe Default VB.NET i klasę DefaultMemberAttribute. –
Chcę MethodInfo, a nie PropertyInfo. – smartcaveman
@smartcaveman: Wow. 'Użyj PropertyInfo.GetGetMethod' na tym, co podałem powyżej. – jason