使用CodeDom实例化非基本类型

时间:2012-06-11 11:04:16

标签: .net instantiation codedom

我正在尝试使用CodeDom来实例化System.Drawing.Font的实例,但我无法弄清楚如何创建一个新类型,特别是FontFamily和FontStyle参数。

如果我执行以下代码:

CodeExpression[] parms = new CodeExpression[3];

parms[0] = new CodePrimitiveExpression(((System.Drawing.Font)value).FontFamily.Name);
parms[1] = new CodePrimitiveExpression(((System.Drawing.Font)value).Size);
parms[2] = new CodePrimitiveExpression(((System.Drawing.Font)value).Style);

codeObjectCreateExpression = new CodeObjectCreateExpression("System.Drawing.Font", parms);

我收到错误

  

无效的基元类型:System.Drawing.FontStyle。考虑使用CodeObjectCreateExpression。

通过阅读,我知道我必须使用CodeObjectCreateExpression来创建类型的实例,但我不确定如何为其分配anything apart from primitives

1 个答案:

答案 0 :(得分:3)

如果你想使用任何对象,那么你不能这样做(至少不使用像序列化这样的黑客攻击或使用反射访问私有字段)。那是因为CodeDOM树必须被翻译成C#(或另一种.Net语言)。并且CodeDOM不知道如何编写构造该对象的代码(它应该调用构造函数吗?哪一个?或工厂方法?或其他什么?)。

但如果只是enum s(如FontStyle)您遇到问题,则可以像访问{{1}上的static字段一样获取其价值} type:

enum