有没有办法在.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中的一种机制来完成这个?
答案 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; }
}
}
}