【问题标题】:Custom Data Types自定义数据类型
【发布时间】:2010-04-10 19:25:59
【问题描述】:

我想创建一些自定义数据类型,但我认为我问的问题不正确。

.NET 中使用了“复合布尔”值,我想设计一些自己的值。 我一直在使用一系列布尔变量,它们有效,但不一样。

.NET 的示例包括: 颜色:黑色 对齐.居中 [字体属性].Bold* *我忘记了真正的名字,但你明白了

我想做这样的事情:

ColorSortQualities

  • 区分颜色
  • 区分NumberOfColors
  • 区分颜色模式

一旦声明,我可以这样做: if(searchOptions.ColorSortQualities == DistinguishColor) [做事]

这叫什么?

谢谢!

【问题讨论】:

  • 是否可以同时拥有“DistinguishColor”和“DistinguishColorPattern”,或者它们是互斥的?

标签: c# .net enums types


【解决方案1】:

使用枚举:

  enum ColorSortQualities
  {
       None,
       DistinguishColor,
       DistinguishNumberOfColors,
       DistinguishColorPattern
  };

【讨论】:

  • 在我看来,不必要地明确声明枚举的类型不是 int32 是一个糟糕的举动。您是否尝试在静态类型上保存几个字节?
  • 好吧,其实我不知道这是一个好还是坏的做法,所以谢谢。
  • 阅读stackoverflow.com/questions/746812/… 后,事情似乎清楚了,再次感谢您。
  • 实际上 CLR 中的每个枚举都是默认的 int32。否则显式声明,除非枚举在边缘情况下被重新利用,例如用于需要字节的 api 调用,只会增加噪音。我正在衡量我所看到的最佳实践,仅此而已。
【解决方案2】:

这称为枚举,在 C# 中使用关键字enum

【讨论】:

  • 完美!正是我想要的。再次感谢
【解决方案3】:

我想你想要一个带有[Flags] 属性的枚举。

[Flags]
enum ColorSortQualities
{
    None = 0x0,
    DistinguishColor = 0x1,
    DistinguishNumberOfColors = 0x2,
    DistinguishColorPattern = 0x4
}

这将让调用者指定它们的任意组合,每个组合都将实现为位标志。请注意,这将允许 32 个选项,因为 int 是一个 32 位的数量。

您的条件代码如下所示:

if((searchOptions & ColorSortQualities.DistinguishColor) == ColorSortQualities.DistinguishColor)

如果这不是您所说的“一系列布尔变量”,请澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2011-06-17
    • 2011-12-20
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多