C# 如何创建一个数据类型,该数据类型是另一个数据类型的可能值的子集
如何创建只允许其他数据类型的特定值的数据类型。例如,假设我想创建一个类型,该类型限制为50个状态作为字符串。我该怎么做呢?使用C# 如何创建一个数据类型,该数据类型是另一个数据类型的可能值的子集,c#,C#,如何创建只允许其他数据类型的特定值的数据类型。例如,假设我想创建一个类型,该类型限制为50个状态作为字符串。我该怎么做呢?使用enum,然后使用helper函数,我觉得有点不舒服 编辑:我想现在添加这个已经晚了,但是编译时错误检查解决方案是理想的。对于您的特定示例,枚举确实是最好的解决方案。对于更复杂的问题,可以使用工厂方法。下面是一个例子: public class State { public string Name { get; private set; } private
enum
,然后使用helper函数,我觉得有点不舒服
编辑:我想现在添加这个已经晚了,但是编译时错误检查解决方案是理想的。对于您的特定示例,枚举确实是最好的解决方案。对于更复杂的问题,可以使用工厂方法。下面是一个例子:
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 + "'.");
}
}
}
在内部,您可以将该值表示为字符串或枚举,这取决于您希望如何使用它。不过,这就是方法。@TylerCormpton最好将这50个状态组织在一个枚举中?我的意思是,按主题,按概念。。。我想还有比这更好的设计。这正是a的用途——一组有限的不同值。
enum
实际上允许每个数字,无论定义与否。这一点都不受限制。确切地说<代码>枚举在.NET中没有很好地实现,因此对于特定情况,有更好的解决方案。也许你可以更详细地描述一下你的需求。。。例如,您是否有一些附加数据,如名称、说明、详细信息、数据项中的其他成员?+1您还可以为所有可能的值提供单例,例如public State Indiana=new State(“Indiana”)代码>,等等。我猜你是想让CreateState
成为静态的?你为什么不让构造函数抛出这个错误?@TylerCrompton-是的,我本想让它成为静态的。就我个人而言,我不喜欢在传入没有明显错误的数据时从构造函数抛出异常。如果传入一个null
,或数组索引的负值,等等,这是一回事。但是如果你要一个字符串,我给你一个字符串,我希望它能起作用。也就是说,如果愿意,您当然可以从构造函数中抛出异常。