2010-02-16 51 views
1

下面的代码工作正常,原始表达式(不足为奇)的ExpressionBuilder返回任何类型的对象

public class SiteContextExpressionBuilder : ExpressionBuilder { 
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { 
     PropertyInfo property = typeof(SiteContext).GetProperty(entry.Expression); 
     return new CodePrimitiveExpression(property.GetValue(null, null))); 
    } 
} 

现在我想返回非原始类型为好。我们来说一个公司对象。
这是如何工作的?我似乎无法找到任何好的例子。

无效的原始类型: ... 考虑使用 CodeObjectCreateExpression

如何实现CodeObjectCreateExpression或替代?

回答

2

我不知道你的公司对象的构造的样子,所以这里的用大小的示例:

构造

new Size(640, 400) 

随着CodeObjectCreateExpression

CodeExpression newSizeExpr = new CodeObjectCreateExpression(new CodeTypeReference(“System.Drawing.Size”), 
    new CodePrimitiveExpression(640), new CodePrimitiveExpression(400)); 

如果你的公司构造函数接受原始参数,您可以像上例中那样使用CodePrimitiveExpressions。如果它需要非基元类型,则可以使用CodePrimitiveExpressions实例化这些非基元类型。缓解,直到你有你需要建立你的公司对象。

更新:源可能会有所帮助:http://blogs.msdn.com/bclteam/archive/2006/04/10/571096.aspx

+0

Thnx,但我如何使用现有的实例?我有一个静态类中的几个属性,我想用这种技术访问。 – Zyphrax 2010-02-21 19:07:35

1

你应该看看CodeExpression的子类,像CodePropertyReferenceExpression使用属性和CodeVariableReferenceExpression得到的实例。

CodeExpressions是语言不可知的语句和表达式的低级表示。您必须将等效的C#语句分解为非常原始的组件。

相关问题