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#中的枚举是什么吗?如果没有,请看看这个