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

标签 c# .net winforms graphics enums

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

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/

相关文章:

c# - 将参数传递给 cmd.exe

c# - 禁用控件的工具提示行为中的错误?

C# - DataReader 无法返回多个结果集

c# - 使用 ASIN 在亚马逊中获取商品/产品价格

javascript - 反向图像搜索特定网站

c# - 我正忙于编写 C# IBM MQ 客户端应用程序,并不断收到 "Exception: The type initializer for ' IBM.WMQ.Nmqi.UnmanagedNmqiMQ' 抛出异常。”

c# - 提高从远程数据库获取数据时的性能

c# - 访问选择 winforms 组合框上的属性

c# - 如何在 Azure 中运行安全的 Service Fabric 有状态服务?

c# - C# 桌面客户端连接到远程 MySQL 数据库的最佳方式是什么?