在.NET中使用路径字符串的反射

时间:2010-06-21 18:48:26

标签: .net reflection

有没有办法在.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 :(得分:0)

不幸的是,没有内置方法来处理这个问题。这将是非常困难和容易出错的,因为这里有很多选项(“st”可以为null,如果定义为System.Object等,则在运行时为不同类型。)。

您需要通过递归遍历属性来处理此问题。

答案 1 :(得分:0)

您可以使用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; }
        }           
    }
}