[英]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.