这是一个非常简单的问题,但我真的很想知道什么是好的做法.
我有一个包括日志子系统的系统.日志包含有关用户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)
但只有一个值的枚举是否可以?最好使用静态常量?或者它是另一种更好的方式?
"用户ID"对我来说听起来不像是一种自然的枚举.这并不像全球范围内有一组天然的用户.
恒定值会更有意义:
const long UnknownUserId = 0;
Run Code Online (Sandbox Code Playgroud)
有有情况下,用一个值的枚举会是有意义的,但它几乎总是成为未来expansoin.
我不喜欢你的枚举,因为大多数开发人员不会期望(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)