我正在寻找一个允许您使用字符串对对象执行反射的库,例如
class SampleClass {
public SampleClass Child {get; set;}
public string SomeValue {get;set;}
}
var a = new SampleClass { Child = new SampleClass { SomeValue = "v"}};
var parser = new ReflectionParser();
var result = parser.Parse("Child.SomeValue", a);
// result is "v"
如果没有,我正在考虑写一个并开源 - 但我并不想重新发明轮子。最初它只是获取属性值,但从长远来看,我可以看到它能够运行方法,根据需要解析参数。
我找到的最接近的是https://code.google.com/archive/p/antix-software/wikis/AntixReflectionQuery.wiki和Using an XPath-style Query with Reflection中引用的XPath样式库Traversing an arbitrary C# object graph using XPath/applying XSL transforms - 但这似乎不再可用了。
答案 0 :(得分:2)
.NET基类库包含一个DataBinder
类,它完全符合您的要求。
它是为ASP.NET WebForms数据绑定而设计的,因此它位于System.Web.UI
命名空间中,需要引用System.Web
。但是不要让它阻止你,它也可以在Web项目之外使用。
class SampleClass
{
public SampleClass Child { get; set; }
public SampleClass[] Children { get; set; }
public string SomeValue { get; set; }
}
var a = new SampleClass { Child = new SampleClass { SomeValue = "v" } };
var result = DataBinder.Eval(a, "Child.SomeValue");
Console.WriteLine(result); // yields v
DataBinder还支持对集合进行索引,因此也可以正确评估Children[0].SomeValue
:
var a = new SampleClass { Children = new SampleClass[] { new SampleClass { SomeValue = "v" } } };
var result = DataBinder.Eval(a, "Children[0].SomeValue");
Console.WriteLine(result); // yields v