我试图了解一般关于Enums的一些事情以及他们如何与Chars特别合作.以下是我工作的例子:
public enum AuditInteractionTypes { Authorized = 'A',Created = 'C',Revised = 'R',Extracted = 'E',Deleted = 'D' }
首先,声明它们枚举AuditInteractionTypes或枚举AuditInteractionTypes:char之间的区别是什么
其次,我看过很多关于尝试使用带有字符的枚举以及如何“使”它来回工作的帖子.可能是愚蠢的问题,但为什么我不能简单地作为一个字符串来回走动.
因此,例如,授权=“A”.
我使用Linq To sql作为我的DAL,如果这很重要,我希望,这是一个更广泛的问题,不是特定于我的环境.
解决方法
它规定了用于存储枚举的基础类型.
当您使用枚举而没有任何其他内容时,它使用int作为底层存储类型.
当您使用enum:< type>时,它使用该类型作为底层存储类型.
在你的情况下,你正在尝试使用char类型的基础类型,但这是无效的,根据the C# reference:
The approved types for an enum are byte,sbyte,short,ushort,int,uint,long,or ulong.
如果要存储char值,则有两个选项.
您可以使用基础类型ushort
(它是一个无符号的16位整数,如char),如下所示:
public enum AuditInteractionTypes : ushort { Authorized = 'A',Deleted = 'D' }
char有一个隐式转换为ushort,所以上面的工作.此外,您可以轻松地比较两者.
如果you want to use a string as the value那么我会推荐类似枚举的类,如下所示:
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"; }
然后,这个类看起来与enum和代码看起来相同.
注意,任何类型都可以使用相同的技巧,但通常这些类型应该是完全不可变的. string很好地填充了这个准则,完全不可变(如果你正确设计了它们,就像大多数系统值类型和其他值类型一样).