簡體   English   中英

ExpressionBuilder返回任何類型的對象

[英]ExpressionBuilder return any type of object

下面的代碼適用於原始表達式(在此不足為奇)

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)));
   }
}

現在,我也想返回非原始類型。 假設一個Company對象。
這是如何運作的? 我似乎找不到任何好的例子。

無效的原始類型:...考慮使用CodeObjectCreateExpression

如何實現CodeObjectCreateExpression或替代方法?

我不知道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

您應該看一下CodeExpression的子類,例如使用屬性的CodePropertyReferenceExpression和使用實例的CodeVariableReferenceExpression。

CodeExpressions是與語言無關的語句和表達式的低級表示。 您必須將等效的C#語句分解為非常原始的組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM