我想设置一个属性,它是使用一个整数值的枚举,像INT到枚举:投做工精细,分配失败
Graphics g = this.CreateGraphics();
int enumValue = 2; // corresponds to SmoothingMode.HighQuality
g.SmoothingMode = (SmoothingMode)2; // does not have expected result
// also tried:
SmoothingMode sm = (SmoothingMode)Enum.ToObject(typeof(SmoothingMode), enumValue); // works correctly
g.SmoothingMode = sm; // still doesn't work!
但对象的属性永远不会被设置为正确的枚举值。我已经通过VS2010的调试器运行了此操作,并且Enum.ToObject的投射和/或使用正常工作,但在分配之后,例如g.SmoothingMode
是AntiAlias而不是HighQuality。实际上,无论我输入什么数字,赋值都会导致将AntiAlias(int等效3)或None(等于4)分配给该对象的属性。
当enum是一个影响铸造&赋值的类的属性时有什么不同,或者只是对Graphics.SmoothingMode有些奇怪,或者是什么?
好吧,所以大家都指出,大多数SmoothingMode枚举值在功能上是等价的。然而,没有解释为什么它不能保持足够的独立性并允许价值分配保持原样。因此,_my_理论认为,这种看似强制的等价是在'Grahpics'属性的'get'方法中实现的...... – 2011-06-17 19:58:21