我想了解一些关于 Enums
的一般情况,以及它们如何与 Chars
一起工作。以下是我正在使用的示例:
public enum AuditInteractionTypes
{
Authorized = 'A',
Created = 'C',
Revised = 'R',
Extracted = 'E',
Deleted = 'D'
}
首先,声明它们 enum AuditInteractionTypes
或 enum AuditInteractionTypes : char
有什么区别
其次,我看过很多关于尝试将 Enums
与 chars
一起使用以及如何“使”它来回工作的帖子。可能是愚蠢的问题,但为什么我不能简单地作为 string
来回。
例如,Authorized = "A"
。
如果这很重要,我已经使用 Linq To SQL 作为我的 DAL,但我希望这是一个更广泛的问题,而不是特定于我的环境。
最佳答案
它规定了将用于存储枚举的基础类型。
当您使用 enum
时没有别的,它使用 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',
Created = 'C',
Revised = 'R',
Extracted = 'E',
Deleted = 'D'
}
char
隐式转换为 ushort
所以上面的作品。此外,您可以轻松比较两者。
如果you want to use a string as the value那么我会推荐 enum
-like 类,像这样:
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
完全不可变(与大多数系统值类型和其他值类型一样,如果您设计正确的话)很好地满足了这一准则。
关于c# - 'Enum : Type' 和简单的 'Enum' 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841923/