【问题标题】:Use of "default" as an enum in C#在 C# 中使用“默认”作为枚举
【发布时间】:2013-10-18 23:07:04
【问题描述】:

我有一个关于使用“默认”作为枚举值的快速问题。我正在读取现有 XML 文件的内容并将元素值解析为枚举。以下是 XML 文件中内容的示例:

<userpref_load_policy>default</userpref_load_policy>

不幸的是,我无法执行以下操作,因为“默认”是关键字! 'at_start' 和 'in_background' 是该元素的其他允许值。

public enum LoadPolicy { default, at_start, in_background }

是否有一种“简单”的方法可以将默认值用作枚举值或欺骗编译器?我有一种讨厌的感觉,我需要求助于自定义扩展方法。我这样说是因为我在写回 XML 文件时调用了 .ToString() 方法(并且有很多枚举..)

提前感谢任何指点,伊恩

【问题讨论】:

标签: c# enums default


【解决方案1】:

是的,您可以使用@ 将其用作标识符:

public enum LoadPolicy { @default, at_start, in_background }

来自 C# 5 规范,第 2.4.2 节:

本节中给出的标识符规则与 Unicode 标准附件 31 推荐的规则完全一致,除了下划线允许作为初始字符(在 C 编程语言中是传统的),标识符中允许使用 Unicode 转义序列, 并且允许使用“@”字符作为前缀,以使关键字可以用作标识符。

我个人更喜欢在枚举本身中使用更惯用的名称,但在枚举值和它们的 XML 表示之间有一个映射。但如果你真的使用枚举值名称,这将起作用......

【讨论】:

  • Jon 是正确的,但我认为将默认枚举值设为“none”是标准做法,这更有意义。
  • @BenRobinson:视情况而定。这是不应该太武断地应用的那些“规则”之一,IMO...并且比非标志枚举更适用于标志枚举。 (正如我在答案中所说,无论如何我都会采取不同的方法,但是......)
  • *&^% 很快!谢谢乔恩,我的 Google-foo 让我失望了。当你知道如何时很容易:)
  • @BenRobinson:点了。但是,在我的情况下,只有 3 个可用值;一个恰好是“默认”,而“无”不是一个选项!
【解决方案2】:

任何关键字都可以使用@进行转义:

public enum LoadPolicy { @default, at_start, in_background }

@ 只是一个标记;不是名字的一部分。所以以后用的时候就可以这么写了:

LoadPolicy x = LoadPolicy.default;

@ 仅在含义不明确时才需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2022-11-16
    • 2021-08-24
    相关资源
    最近更新 更多