为什么RotateFlipType枚举的实现方式不同?

时间:2015-09-27 16:13:23

标签: c# .net winforms enums

以下是.NET 4中<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <?php $fetch_sql = "SELECT fld_news_pictures, fld_news_name, fld_news_details FROM tbl_news "; $fetch_result= mysql_query($fetch_sql) or die(mysql_error()); while($fetch_row=mysql_fetch_array($fetch_result)) { $fld_news_name = $fetch_row['fld_news_name']; $fld_news_pictures = $fetch_row['fld_news_pictures']; $fld_news_details = $fetch_row['fld_news_details']; ?> <meta property="og:title" content="<?php echo $fld_news_name; ?>" /> <meta property="og:image" content="http://mysite/images/<?php echo $fld_news_pictures; ?>" /> <meta property="og:description" content="<?php echo $fld_news_details; ?>" /> <?php } ?> 枚举的声明:

RotateFlipType

我理解这些值是如何配对的,否则会产生相同的结果。将调试器值与public enum RotateFlipType { Rotate180FlipXY = 0, RotateNoneFlipNone = 0, Rotate270FlipXY = 1, Rotate90FlipNone = 1, Rotate180FlipNone = 2, RotateNoneFlipXY = 2, Rotate270FlipNone = 3, Rotate90FlipXY = 3, Rotate180FlipY = 4, RotateNoneFlipX = 4, Rotate90FlipX = 5, Rotate270FlipY = 5, RotateNoneFlipY = 6, Rotate180FlipX = 6, Rotate90FlipY = 7, Rotate270FlipX = 7, } 值进行比较时,上述枚举变得不友好。也不适合数据绑定方案。例如:

RotateFlipType.ToString

这与操作订单有什么关系吗?他们可能没有使用var value = RotateFlipType.RotateNoneFlipNone; // Debugger shows correct string for [value] which is [RotateNoneFlipNone]. var text = value.ToString(); // Output of [text] is [Rotate180FlipXY]. Presumably because it is declared first in the list. 或将枚举分成两部分(分离旋转和翻转)?

2 个答案:

答案 0 :(得分:4)

我意识到马早已不复存在,无需关闭谷仓门,但是......

在此模式中选择了这些常量,以使图像反射更容易。

要水平翻转,可以使用这个简单的操作:

rotation_value ^= 4;

垂直翻转:

rotation_value ^= 6;

同时翻转(180度旋转):

rotation_value ^= 2;

答案 1 :(得分:2)

枚举覆盖ToString方法以使用Enum.GetName来查找给定值的名称。对于GetName,MSDN有以下注释:

  

如果多个枚举成员具有相同的基础值,则   GetName方法保证它将返回其中一个的名称   枚举成员。但是,它不能保证它会   始终返回相同枚举成员的名称。结果是,   当多个枚举成员具有相同的值时,您的   应用程序代码永远不应该依赖于返回a的方法   特定成员的名字。

因此,如果多个成员具有相同的值,则无法保证ToString会为您提供原始名称。