如何创建仅允许其他数据类型的特定值的数据类型。例如,假设我想创建一个仅限于五十个状态的类型作为字符串。我该怎么做呢?使用enum
然后使用辅助函数对我来说感觉有些笨拙。
编辑:我想添加它已经很晚了,但是编译时错误检查解决方案将是理想的。
答案 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 + "'.");
}
}
}
在内部,您可以将值表示为字符串或枚举,具体取决于您希望如何使用它。