C# 是否有基于字符串对.Net对象执行反射的库?
我正在寻找一个库,它允许你使用字符串对一个对象执行反射,例如C# 是否有基于字符串对.Net对象执行反射的库?,c#,.net,reflection,C#,.net,Reflection,我正在寻找一个库,它允许你使用字符串对一个对象执行反射,例如 class-SampleClass{ 公共SampleClass子级{get;set;} 公共字符串SomeValue{get;set;} } var a=newsampleclass{Child=newsampleclass{SomeValue=“v”}; var parser=新的ReflectionParser(); var result=parser.Parse(“Child.SomeValue”,a); //结果是“v”
class-SampleClass{
公共SampleClass子级{get;set;}
公共字符串SomeValue{get;set;}
}
var a=newsampleclass{Child=newsampleclass{SomeValue=“v”};
var parser=新的ReflectionParser();
var result=parser.Parse(“Child.SomeValue”,a);
//结果是“v”
如果不是的话,我正在考虑写一个并开源——但我不想重新发明轮子。最初它只获取属性值,但从长远来看,我可以看到它获得了运行方法、根据需要解析参数的能力
我找到的最接近的是和中引用的XPath样式库,但是这似乎不再可用 NET基类库包含一个类,该类的功能完全符合您的需要 它是为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还支持对集合进行索引,因此子项[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
好问题!由于此语法(
Child.SomeValue
)由各种数据绑定功能(例如WPF数据绑定)使用,因此您甚至可能在BCL本身中找到一些内容。如果可用,我会尝试使用nameof
<代码>整数索引=0$“{nameof(SampleClass.Children)}[{index}].{nameof(SampleClass.SomeValue)}”=>“Children[0]。SomeValue”
非常好,谢谢。从长远来看,我也有一些允许函数评估的想法-例如SomeObject.GetResultsBefore('2017-05-01'),但这是一个很好的开始,我不确定是否需要。