Отражение с использованием строк пути в .NET - PullRequest
5 голосов
/ 21 июня 2010

Есть ли способ использовать отражение в .net для получения значения свойства, используя путь, подобный так ...

type t {
    id : int
    name : string
}

type s {
    id : int
    st : t
{

let a = {id = 1; {id = 2; name = "foo"}}

a.getType().getProperty("st.name")

Извините за F #.Это не работает, очевидно, но это иллюстрирует то, что я пытаюсь сделать.Я мог бы написать рекурсивный алгоритм для этого, но кто-нибудь знает механизм в API для этого?

Ответы [ 2 ]

0 голосов
/ 21 июня 2010

Вы можете использовать DataBinder.Eval для динамической оценки выражений пути (хотя это будет означать добавление зависимости к System.Web):

http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

C # Пример:

using System;
using System.Web.UI;

namespace DataBinderEval
{
    internal class Program
    {
        private static void Main()
        {
            object target = new s { id = 1, st = new t { id = 2, name = "foo" } };

            string expression = "st.name";

            object result = DataBinder.Eval(target, expression);

            Console.WriteLine(result);
        }

        private class t
        {
            public int id { get; set; }
            public string name { get; set; }
        }

        private class s
        {
            public int id { get; set; }
            public t st { get; set; }
        }           
    }
}
0 голосов
/ 21 июня 2010

К сожалению, нет встроенного метода для этого.Это было бы очень сложно и подвержено ошибкам, поскольку здесь много опций («st» может быть нулевым, другой тип во время выполнения, если он определен как System.Object и т. Д.).Вам нужно будет справиться с этим путем рекурсивного обхода свойств.

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