2

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

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

4

2 回答 2

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);
   }
}
于 2013-01-11T13:58:56.240 回答
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 + "'.");
    }
  }

}

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

于 2013-01-11T14:00:14.580 回答