gpt4 book ai didi

c# - int to enum : cast works fine, 赋值失败

转载 作者:行者123 更新时间:2023-11-30 19:20:25 26 4
gpt4 key购买 nike

我正在尝试使用整数值设置一个枚举属性,例如

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.SmoothingModeAntiAlias 而不是 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.

所以基本上有三种模式:

  • 抗锯齿渲染(HighQualityAntiAlias)
  • 无抗锯齿(默认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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com