Доступ к отраженному объекту с использованием строки - PullRequest
0 голосов
/ 28 января 2011

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

Это кажется довольно простым, но я обнаружил сложности при разборе выражения из-за регулярного выражения.

Моей конечной целью должна быть рендеринг строки, основанный на свойствах объекта. Примером является DebuggerDisplayAttribute , который позволяет создать строку путем доступа к объекту. Я не нашел ничего полезного для выполнения обработки строк; поэтому я начал вручную анализировать строку выражения с помощью регулярного выражения.

Например, следующее выражение довольно просто:

"MyFixedString = {PropertyName}"

Итак, токены, заключенные в "{...}", представляют свойство объекта. Извлеките имя свойства, получите значение с помощью отражения, вызовите метод ToString () и замените его в строке выражения, чтобы получить результат.

Но я бы хотел выполнить более сложный доступ к объектам:

"MyFixedString = {Property.Method(\"MyMethodArg.1\", \"MyMethodArg.2\").Field}"

Конечно, я понимаю, что доступ к объектам разделен точками (но это не просто, поскольку точки могут присутствовать в других элементах (то есть аргументах метода). Кроме того, мне нужно распознавать методы, поля / свойства, индексированные свойства .

К сожалению, мне не хватает основ регулярных выражений (клянусь, я изучу их!).

Итак, мой вопрос: есть ли какой-то встроенный класс, который делает то, что мне нужно? Если нет, мне нужно регулярное выражение, которое разделяет входную строку на один символ (в моих случаях это точки и запятые), но не разделяет в том случае, если символ заключен в двойные кавычки.

Последний пример будет разбит на

  • Недвижимость
  • Метод (\ "MyMethodArg.1 \", \ "MyMethodArg.2 \")
    • Метод
    • "MyMethodArg.1 \"
    • \ "MyMethodArg.2 \"
  • поле

1 Ответ

1 голос
/ 28 января 2011

Может быть, вам стоит взглянуть на FormatWith .

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