我正在寻找一个库,它允许您使用字符串对对象执行反射,例如
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"
如果没有,我正在考虑编写一个并将其开源 - 但我不想重新发明轮子。最初它只会获取属性值,但从长远来看,我可以看到它获得了运行方法、根据需要解析参数的能力。
我发现的最接近的是一个 XPath 样式库https://code.google.com/archive/p/antix-software/wikis/AntixReflectionQuery.wiki在Using an XPath-style Query with Reflection and Traversing an任意 C# 对象图中引用使用 XPath/应用 XSL 转换- 但是这似乎不再可用。
.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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句