我试图设置一个使用整数值的枚举属性,例如
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(等于3的整数)或None(等于4的整数)分配给对象的属性。当枚举是影响转换和赋值的类的属性时,或者对于Graphics.SmoothingMode只是有些奇怪,还是什么呢?
最佳答案
看一下SmoothingMode Enumeration描述。
引用:
Default,None和HighSpeed是
等效并指定渲染
没有应用平滑。
抗锯齿和高品质是
等价并指定渲染
应用平滑。
因此,基本上有三种模式:
抗锯齿渲染(HighQuality
,AntiAlias
)
无抗锯齿(Default
,None
,HighSpeed
无效(Invalid
)
您的代码中的枚举没有问题。以下行是合法的。
g.SmoothingMode = (SmoothingMode)2;
它只是在内部像对待
HighQuality
一样对待AntiAlias
。如果您这样做:
g.SmoothingMode = SmoothingMode.HighQuality;
var x = g.SmoothingMode;
x
将返回SmoothingMode.AntiAlias
,因为这基本相同。