正确的方法取决于对象的实例化方式。
例如在 System.Drawing.Color 的情况下,您可以使用静态方法实例化一个值
public static System.Drawing.Color FromArgb (int argb);
因此初始化会导致:
private System.Drawing.Color Attribute_1 = System.Drawing.Color.FromArgb(-1);
要构建这样的表达式\赋值,您必须指示代码构建器您要使用方法(不是构造函数)并且该方法采用一个 int 参数(原始类型)。
field.InitExpression = new CodeMethodInvokeExpression(
new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(field.Type), "System.Drawing.Color.FromArgb"),
new CodeExpression[] { new CodePrimitiveExpression(initialValue.ToArgb()) });
通常,类通过构造函数实例化对象,在这种情况下,您必须为构造函数指定类型和特定的参数列表。
例如,如果您构建了一个 2D Point 类,其构造函数采用两个点 (X,Y),您可以编写:
field.InitExpression = new CodeObjectCreateExpression(field.Type,
new CodeExpression[] {
new CodePrimitiveExpression(initialValue.X),
new CodePrimitiveExpression(initialValue.Y)
});
(在这种情况下,两个参数都是双精度或浮点数,所以我使用了 CodePrimitiveExpression。)
您可以根据您正在处理的类来概括最后一个示例。
您可以在此处查看文档:
https://docs.microsoft.com/en-us/dotnet/api/system.codedom.codemethodinvokeexpression
https://docs.microsoft.com/en-us/dotnet/api/system.codedom.codeobjectcreateexpression