C# 如何实现一系列预定义的常量“;“国家”;财产的所有权?

C# 如何实现一系列预定义的常量“;“国家”;财产的所有权?,c#,types,constants,C#,Types,Constants,我有一个属性LegalCaseStatus。我的目的是使属性接受预定义的批准值范围。该范围必须在我的程序中可见且保持不变。下面是列表的一个示例: Plaintiff Defendant Third Party Debitor Creditor Petitioner 因此,我能想到的最好方法是声明一个静态类,并用相应的常量填充它: public static class Participants { public const byte Piaintiff = 0,

我有一个属性
LegalCaseStatus
。我的目的是使属性接受预定义的批准值范围。该范围必须在我的程序中可见且保持不变。下面是列表的一个示例:

Plaintiff
Defendant
Third Party
Debitor
Creditor
Petitioner
因此,我能想到的最好方法是声明一个静态类,并用相应的常量填充它:

public static class Participants
{
    public const byte 
        Piaintiff = 0, 
        Defendant = 1, 
        ThirdParty = 2, 
        Debitor= 3, 
        Creditor = 4, 
        Petitioner = 5;
}
因此,在使用名称空间后,我只需执行以下操作:

public byte LegalCaseStasus = Plaintiff;
唯一的问题是,因为它只是一个
byte
成员,所以它将接受任何
byte
成员:

LegalCaseStatus = 99; // ok
LegalCaseStatus = SomeOtherByteConstant; // ok
如何保护会员
法律地位
?我的解决方案通常正确吗?

您可以使用枚举-枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。听起来就像你在问题中描述的:

public enum Participants
{
        Piaintiff = 0,
        Defendant = 1,
        ThirdParty = 2,
        Debitor = 3,
        Creditor = 4,
        Petitioner = 5
}
在枚举定义之后,您可以完全按照您想要的方式使用它:

Participants LegalCaseStasus = Participants.ThirdParty;
LegalCaseStasus = 99;   // ERROR      
byte underlying_value = (byte)LegalCaseStasus; // value == 2

注意:
enum
的基础值是
int
!当您强制转换到
byte
时,您需要确保没有超过
byte
限制的预定义值。

听起来像是枚举的完美用例?您听说过枚举吗。您可以很容易地预定义一组基础整数数字类型的命名常量。您可以使用枚举,正如其他人所说,但警告一句-它们仍然不会阻止在枚举中分配未定义的值。因此,如果需要,您仍然应该在属性设置程序中抛出
ArgumentOutOfRangeException
。@IgorCheglakov此语法执行强制转换。Cast是一种将值从一种数据类型转换为另一种数据类型的方法。在这种特定情况下,我们将
参与者
类型的变量强制转换为
int