Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有基于字符串对.Net对象执行反射的库?_C#_.net_Reflection - Fatal编程技术网

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'),但这是一个很好的开始,我不确定是否需要。