C# 如何使我的类变量只能设置为三个选项之一?
我有一门课是这样的:C# 如何使我的类变量只能设置为三个选项之一?,c#,C#,我有一门课是这样的: public class Meta { public string Height { get; set; } } 我想在课堂上增加一些东西,但我不知道怎么做。我希望高度只能设置为“高”或“短”。未来可能会有更多的事情发生,但现在只能在这两者之间做出选择。我还希望它在构造函数中默认为“Short”。我想我需要使用枚举,但我不知道如何使用 这样做 有人能解释一下吗。我将非常感激 您可以使用可能的值定义一个: public enum HeightTypes {
public class Meta
{
public string Height { get; set; }
}
我想在课堂上增加一些东西,但我不知道怎么做。我希望高度只能设置为“高”或“短”。未来可能会有更多的事情发生,但现在只能在这两者之间做出选择。我还希望它在构造函数中默认为“Short”。我想我需要使用枚举,但我不知道如何使用
这样做
有人能解释一下吗。我将非常感激 您可以使用可能的值定义一个:
public enum HeightTypes
{
Tall,
Short
}
然后将其用作Height
属性的类型:
public class Meta
{
public Meta()
{
// Set the Height property to Short by default in the constructor
Height = HeightTypes.Short;
}
public HeightTypes Height { get; set; }
}
现在,当您拥有Meta类的实例时,您可以将其Height属性仅设置为“高”或“短”:
var meta = new Meta();
meta.Height = HeightTypes.Tall;
您可以使用可能的值定义一个:
public enum HeightTypes
{
Tall,
Short
}
然后将其用作Height
属性的类型:
public class Meta
{
public Meta()
{
// Set the Height property to Short by default in the constructor
Height = HeightTypes.Short;
}
public HeightTypes Height { get; set; }
}
现在,当您拥有Meta类的实例时,您可以将其Height属性仅设置为“高”或“短”:
var meta = new Meta();
meta.Height = HeightTypes.Tall;
是的,您可以使用枚举:
public enum Height
{
Short = 0,
Tall = 1;
}
public class Meta
{
public Height Height { get; private set; }
public Meta(Height height)
{
if (!Enum.IsDefined(typeof(Height), height))
{
throw new ArgumentOutOfRangeException("No such height");
}
this.Height = height;
}
}
(如果希望属性可写,则需要将验证放在setter中。)
您需要验证,因为枚举实际上只是不同类型的整数值。例如,在没有验证的情况下,这将很好地进行:
new Meta((Height) 1000);
但对任何呼叫者来说,这显然毫无意义。是的,您可以使用枚举:
public enum Height
{
Short = 0,
Tall = 1;
}
public class Meta
{
public Height Height { get; private set; }
public Meta(Height height)
{
if (!Enum.IsDefined(typeof(Height), height))
{
throw new ArgumentOutOfRangeException("No such height");
}
this.Height = height;
}
}
(如果希望属性可写,则需要将验证放在setter中。)
您需要验证,因为枚举实际上只是不同类型的整数值。例如,在没有验证的情况下,这将很好地进行:
new Meta((Height) 1000);
但它显然对任何调用方都没有意义。定义枚举
public Enum Heights
{
Tall,
Short
}
然后将属性定义为enum类型
public Heights Height { get; set; }
有关详细信息,请参见定义枚举
public Enum Heights
{
Tall,
Short
}
然后将属性定义为enum类型
public Heights Height { get; set; }
有关更多信息,请参见次要说明(主要针对OP):枚举值不会自动验证;您可以指定其他既不高也不短的值。请注意(主要是给OP):枚举值不会自动验证;您可以指定其他既不高也不短的值请原谅我的无知,但是为什么要检查
enum
参数。强类型难道还不够吗?@InBetween:不,还不够。请看答案末尾的部分-我们不想允许(Height)1000
作为属性值,但正常基础结构中没有任何东西可以阻止它。噢,哇,我实际上认为(Height)1000会抛出应该是预期行为的IMHO,因为Height没有定义该值。有点困惑为什么允许这种强制转换。请原谅我的无知,但是为什么要检查enum
参数。强类型难道还不够吗?@InBetween:不,还不够。请看答案末尾的部分-我们不想允许(Height)1000
作为属性值,但正常基础结构中没有任何东西可以阻止它。噢,哇,我实际上认为(Height)1000会抛出应该是预期行为的IMHO,因为Height没有定义该值。有点困惑为什么允许这种类型转换。你知道C#is中的enum是什么吗?如果没有,请看看这篇文章,你知道C#中的枚举是什么吗?如果没有,请看看这个