Как я могу читать и записывать индексные свойства типа в .NET через отражение? - PullRequest
1 голос
/ 04 декабря 2011

У меня есть тип, у которого есть свойства индекса, к которым я хочу получить доступ через отражение. Как я могу это сделать? Я предполагаю, что свойство индекса можно извлечь как обычное свойство, но я не знаю, как к нему добраться с помощью стандартного отражения. Кроме того, если у меня есть несколько свойств индекса с разными сигнатурами, как в следующем коде, возможно ли получить доступ к каждому из них?

public class IndexType
{
   // Assume some sensible implementation of the getters/setters

   public object this[int index] { get; set; }

   public object this[string key] { get; set; }

   public object this[int index, string key] { get; set; }
}

1 Ответ

3 голосов
/ 04 декабря 2011

Вы должны быть в состоянии дифференцировать свойство индекса по тому факту, что оно требует параметров индекса. Этот запрос linq должен сделать это путем проверки метода GetIndexParameters.

IEnumerable<PropertyInfo> indexProperties = 
    O.GetType().GetProperties().Where(pi => pi.GetIndexParameters().Any());

Дифференцирование, которое может быть сделано путем проверки чисел и типа параметров.

После разумной реализации свойств вашего индекса этот код:

        foreach (PropertyInfo pi in indexProperties) {
            foreach (ParameterInfo parm in pi.GetIndexParameters()) {
                Console.WriteLine(parm.ParameterType.ToString());
            }
            Console.WriteLine();
        }

Урожайность:

System.Int32

System.String

System.Int32
System.String

Press any key to continue . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...