如何创建只允许其他数据类型的特定值的数据类型。例如,假设我想创建一个限制为 50 个状态的类型作为字符串。我该怎么做呢?使用一个enum
然后一个辅助函数对我来说感觉有点hacky。
编辑:我想添加这个已经很晚了,但是编译时错误检查解决方案将是理想的。
如何创建只允许其他数据类型的特定值的数据类型。例如,假设我想创建一个限制为 50 个状态的类型作为字符串。我该怎么做呢?使用一个enum
然后一个辅助函数对我来说感觉有点hacky。
编辑:我想添加这个已经很晚了,但是编译时错误检查解决方案将是理想的。
对于您的具体示例,枚举确实是最好的解决方案。对于更复杂的事情,您可以使用工厂方法。这是一个例子:
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);
}
}
使用一个类,并且只允许构造函数中的特定值。这样就不可能创建具有不正确值的类的实例。(使用枚举不会将值限制为仅指定的值。)
简单的例子:
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 + "'.");
}
}
}
在内部,您可以将值表示为字符串或枚举,这取决于您要如何使用它。