c# - 'Enum : Type' 和简单的 'Enum' 有什么区别

标签 c# .net enums

我想了解一些关于 Enums 的一般情况,以及它们如何与 Chars 一起工作。以下是我正在使用的示例:

public enum AuditInteractionTypes
{
    Authorized = 'A',
    Created = 'C',
    Revised = 'R',
    Extracted = 'E',
    Deleted = 'D'
}

首先,声明它们 enum AuditInteractionTypesenum AuditInteractionTypes : char 有什么区别

其次,我看过很多关于尝试将 Enumschars 一起使用以及如何“使”它来回工作的帖子。可能是愚蠢的问题,但为什么我不能简单地作为 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/

相关文章:

c# - 有没有更好的方法将对象从数据库查询映射到对象?

c# - Windows 窗体的 MVP 示例

c# - 如何获取串行端口设备 ID?

c# - 对绑定(bind)到 linq SP 的 gridview 进行排序

java - .Net 中的 Struts、JSF 等 MVC 框架

c# - 从 .NET 使用 SAP Web 服务会抛出异常 ServiceModel.FaultException

java - 在 Spring Boot Controller 中反序列化枚举忽略大小写

python - 从旧式枚举快速更新到新式枚举的安全性

mysql - 在 MySQL ENUM 字段中使用符号,这是个好主意吗?

c# - 可以通过索引方式获取类属性值或如何摆脱辅助方法 'GetValue'