'Enum:Type'与'Enum'之间的区别是什么?

Ref*_*din 7 .net c# enums

我试图了解Enums一般的一些事情以及它们如何与之合作Chars.以下是我工作的例子:

public enum AuditInteractionTypes
{
    Authorized = 'A',
    Created = 'C',
    Revised = 'R',
    Extracted = 'E',
    Deleted = 'D'
}
Run Code Online (Sandbox Code Playgroud)

首先,什么是宣布他们之间的差异enum AuditInteractionTypesenum AuditInteractionTypes : char

其次,我看过很多关于尝试使用的帖子Enums,chars以及如何"让"它来回运作.可能是愚蠢的问题,但为什么我不能简单地来回走动string.

所以,例如,Authorized = "A".

我使用Linq To SQL作为我的DAL,如果这很重要,我希望,这是一个更广泛的问题,不是特定于我的环境.

cas*_*One 13

它规定了用于存储枚举的基础类型.

当您使用enum其他任何东西时,它使用a int作为底层存储类型.

使用时enum : <type>,它使用该类型作为底层存储类型.

在你的情况下,char根据C#参考,你试图创建基础类型的类型,但这是无效的:

枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong.

如果要存储char值,则有两个选项.

您可以使用基础类型ushort(它是无符号的16位整数char),如下所示:

public enum AuditInteractionTypes : ushort
{
    Authorized = 'A',
    Created = 'C',
    Revised = 'R',
    Extracted = 'E',
    Deleted = 'D'
}
Run Code Online (Sandbox Code Playgroud)

char有一个隐含的转换,ushort所以上面的工作.此外,您可以轻松地比较两者.

如果你想使用一个字符串作为值,那么我建议使用enum类似的类,如下所示:

public static class AuditInteractionTypes
{
    // You can make these static readonly if they are likely to change.
    public const string Authorized = "A";
    public const string Created = "C";
    public const string Revised = "R";
    public const string Extracted = "E";
    public const string Deleted = "D";
}
Run Code Online (Sandbox Code Playgroud)

然后,这个类几乎看起来和a enum和代码一样.

注意,可以使用任何类型完成相同的技巧,但通常这些类型应该是完全不可变的. string很好地填充了这个指南,完全不可变(如果你正确设计它们,就像大多数系统值类型和其他值类型一样).