1

下面的代码适用于原始表达式(这并不奇怪)

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 或替代方案?

4

2 回答 2

2

我不知道您的 Company 对象的构造函数是什么样的,所以这里有一个 Size 示例:

构造函数

new Size(640, 400)

使用 CodeObjectCreateExpression

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

如果您的 Company 构造函数接受原始参数,则可以像上面的示例一样使用 CodePrimitiveExpressions。如果它需要非原始类型,您可以使用 CodePrimitiveExpressions 实例化这些非原始类型。递归,直到您拥有构建 Company 对象所需的内容。

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

于 2010-02-21T05:53:03.947 回答
1

您应该查看 CodeExpression 的子类,例如使用属性的 CodePropertyReferenceExpression 和获取实例的 CodeVariableReferenceExpression。

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

于 2010-02-25T09:04:49.083 回答