我正在尝试使用整数值设置一个枚举属性,例如
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(相当于 int 4)分配给对象的属性。
当枚举是影响转换和分配的类的属性时,是否有什么不同,或者只是关于 Graphics.SmoothingMode 的一些奇怪的东西,或者什么?
最佳答案
看看SmoothingMode Enumeration说明。
引用:
Default , None, and HighSpeed are equivalent and specify rendering without smoothing applied.
AntiAlias and HighQuality are equivalent and specify rendering with smoothing applied.
所以基本上有三种模式:
- 抗锯齿渲染(
HighQuality
,AntiAlias
) - 无抗锯齿(
默认
、无
、HighSpeed
- 无效(
无效
)
你代码中的枚举没有问题。下面一行是合法的。
g.SmoothingMode = (SmoothingMode)2;
它只是在内部对待 HighQuality
的方式与对待 AntiAlias
的方式相同。
如果你这样做:
g.SmoothingMode = SmoothingMode.HighQuality;
var x = g.SmoothingMode;
x
将返回 SmoothingMode.AntiAlias
,因为这基本相同。
关于c# - int to enum : cast works fine, 赋值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380199/