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

5

有没有办法在 .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中是否有机制可以实现这一点?


这类似于Java的JXPath。我不知道.NET的等效物。 - Matthew Flaschen
2个回答

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; }
        }           
    }
}

很遗憾,我不能使用这个,因为我正在用F#编写Silverlight应用程序。 - PhilBrown

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接