使用字符串反射对象访问

时间:2011-01-28 11:54:23

标签: c# regex reflection

我想只使用一个字符串来访问一个通用对象。我知道通过反射可以访问泛型对象,所以我需要正确解析字符串表达式,提取对象访问令牌,并使用反射执行它们。

这似乎很容易,但我发现表达式解析中存在困难,因为正则表达式。

我的最终目标应该是基于对象属性的字符串渲染。一个例子是DebuggerDisplayAttribute,它允许通过访问对象来生成字符串。 我没有找到任何有用的执行字符串处理;所以我开始使用正则表达式手动解析表达式字符串。

例如,以下表达式非常简单:

"MyFixedString = {PropertyName}"

因此,括在“{...}”的标记表示对象属性。提取属性名称,使用反射获取值,调用 ToString()方法并将其替换为表达式字符串以获取结果。

但我喜欢执行更复杂的对象访问:

"MyFixedString = {Property.Method(\"MyMethodArg.1\", \"MyMethodArg.2\").Field}"

当然,我理解对象访问是由点分隔的(但这并不简单,因为点可能存在于另一个元素中(即方法参数)。另外,我需要识别方法,字段/属性,索引属性

可悲的是,我缺少正则表达基础知识(我发誓我会研究它们!)。

所以,我的问题是:是否有一些内置类可以满足我的需求?如果没有,我需要一个正则表达式,它将输入字符串拆分为一个字符(在我的例子中是点和逗号),但如果字符用双引号括起来,则不要拆分。

最后一个例子将在

中拆分
  • 属性
  • 方法(\“MyMethodArg.1 \”,\“MyMethodArg.2 \”)
    • 方法
    • “MyMethodArg.1 \”
    • \ “MyMethodArg.2 \”
  • 字段

1 个答案:

答案 0 :(得分:1)

也许你应该看看FormatWith