如何创建数据类型,该数据类型是另一个数据类型的可能值的子集

时间:2013-01-11 13:55:27

标签: c#

如何创建仅允许其他数据类型的特定值的数据类型。例如,假设我想创建一个仅限于五十个状态的类型作为字符串。我该怎么做呢?使用enum然后使用辅助函数对我来说感觉有些笨拙。

编辑:我想添加它已经很晚了,但是编译时错误检查解决方案将是理想的。

2 个答案:

答案 0 :(得分:2)

对于您的具体示例,枚举实际上是最佳解决方案。对于更复杂的东西,您可以使用工厂方法。这是一个例子:

public class State
{
   public string Name { get; private set; }

   private State(string name)
   {
      this.Name = name;
   }

   public static State CreateState(string name)
   {
      // validate and throw error if invalid
      return new State(name);
   }
}

答案 1 :(得分:1)

使用类,只允许构造函数中的特定值。这样就不可能创建具有不正确值的类的实例。 (使用枚举不会将值限制为仅指定的值。)

简单示例:

public class Paint {

  public string Name { get; private set; }

  public Paint(string name) {
    switch (name) {
      case "Red":
      case "Green":
      case "Blue":
        Name = name;
        break;
      default:
        throw new ArgumentException("Illegal paint name '" + name + "'.");
    }
  }

}

在内部,您可以将值表示为字符串或枚举,具体取决于您希望如何使用它。