我正在尝试使用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 。
答案 0 :(得分:3)
如果你想使用任何对象,那么你不能这样做(至少不使用像序列化这样的黑客攻击或使用反射访问私有字段)。那是因为CodeDOM树必须被翻译成C#(或另一种.Net语言)。并且CodeDOM不知道如何编写构造该对象的代码(它应该调用构造函数吗?哪一个?或工厂方法?或其他什么?)。
但如果只是enum
s(如FontStyle
)您遇到问题,则可以像访问{{1}上的static
字段一样获取其价值} type:
enum