有一个单值的枚举是正确的吗?

Cor*_*Doe 3 c# enums

这是一个非常简单的问题,但我真的很想知道什么是好的做法.

我有一个包括日志子系统的系统.日志包含有关用户ID的信息.日志简化如下:

log.RegisterEvent(eventType, userID, eventDetails);
Run Code Online (Sandbox Code Playgroud)

某些事件是系统事件,它们没有关联userID.由于用户ID是正整数,我认为0意味着事件不会给用户:

log.RegisterEvent(eventType, 0, eventDetails);
Run Code Online (Sandbox Code Playgroud)

但是把0放在那里只是......不对.我想过使用枚举,比如:

enum UserID
{
    None = 0
}
Run Code Online (Sandbox Code Playgroud)

但只有一个值的枚举是否可以?最好使用静态常量?或者它是另一种更好的方式?

Jon*_*eet 8

"用户ID"对我来说听起来不像是一种自然的枚举.这并不像全球范围内有一组天然的用户.

恒定值会更有意义:

const long UnknownUserId = 0;
Run Code Online (Sandbox Code Playgroud)

情况下,用一个值的枚举会是有意义的,但它几乎总是成为未来expansoin.


Mar*_*age 5

最好使用常量 - 否则你必须在使用时转换枚举值,因为API确实需要一个数字.枚举用于封闭的值集,用户ID不属于此类别.


Jep*_*sen 3

我不喜欢你的枚举,因为大多数开发人员不会期望(UserIDEnum)42使用它,因为它不是枚举类型的“定义”值。

另外,“神奇”常数的想法对我来说并不是很有吸引力。

对于可空类型来说,这似乎是一个明显的情况,即int?(也称为Nullable<int>)。大多数开发人员都会理解,如果为int?null(HasValue为 false),则表示不存在用户 ID,如果为 42,则这就是用户 ID。

因此将第二个参数更改为 type int?。调用将如下所示:

log.RegisterEvent(eventType, null, eventDetails);    // no user ID in this case
log.RegisterEvent(eventType, userID, eventDetails);  // variable userID is automatically "lifted" from int to Nullable<int>
Run Code Online (Sandbox Code Playgroud)