使用enum表示C#中的ID

时间:2009-04-02 10:30:12

标签: c# types

我使用普通的int在内部表示一些ID,但我需要一个常量来表示一个空ID,而我在玩游戏时意识到这会起作用:

public enum ID : int { Null = -1 }

然后例如:

ID myID = ID.Null;

这是个坏主意吗? 仅使用普通的整体更糟糕吗? 如果这是一个问题,表示ID的最佳方式是什么?

感谢。

5 个答案:

答案 0 :(得分:7)

为什么不使用Nullable int? Nullable<int>int?

EDIT
或者,如果您不喜欢它,请使用内置int.MinValue作为表示null id的常量。 无论哪种方式,它们都是标准的,而不是一些定制黑客。

答案 1 :(得分:2)

为什么不直接使用常量,如问题所述?如果你想拥有一系列“神奇”的ID,我想使用枚举就像任何方法一样好。

正如另一张海报建议的那样,使用内置常量之一,例如int.MinValue,几乎可以肯定是最好的选择。

答案 2 :(得分:0)

你只需要一个值,Null?如果是这样,我会使用const。

还取决于范围 - 如果您在类中,跨多个类或从一个程序集到另一个程序集中使用此枚举。如果你使用enums交叉汇编,你需要注意一个奇怪的情况(我目前找不到任何引用,并且不记得确切的细节),因为枚举名称和值可能看起来是不同步的 - 尽管我认为你可以通过明确定义值来避免这种情况,正如你在这里所做的那样。

答案 3 :(得分:0)

我认为取决于,但我更喜欢处理简单常量的enunmerations(在许多情况下)。这个beccuse枚举代表比常量更详细的东西,你可以在许多情况下使用枚举和许多用法。

我也认为你没有代表“语言空”而是“传统的空”,实际上你将你的ID设置为值-1的枚举值,所以这说明了你打算做什么以及什么我正在谈论,因为这个原因,如果你打算使用“语言无效”,使用可空的Nullable<int>int?仍然是一个好主意。

在某些情况下,例如使用ORM或类似工具时,最好定义一种非设定值而不是空值,因此使用枚举可能很有用,正如我之前所说的那样。

最后我想,想想你需要代表什么样的零

答案 4 :(得分:0)

感谢您的回答。我想我喜欢这个首先它使我的代码比使用普通的int或int更容易阅读?没有单独的ID类的不必要的开销,例如:

int? myId = getAnIDFromSomewhere();

VS

ID myId = getAnIDFromSomewhere();

其次,它将类型和Null常量绑定在一个包中(当然,int也是如此)。另一方面,它在某种程度上感觉不对,因此我的问题在这里。

导致我这一点的一件事是我无法在返回/使用ID的接口上包含NullID常量(因为C#不会让我),这也感觉不对(因为返回NullID的可能性)似乎是该界面的一部分。)

无论如何,我认为这里的回答清楚地表明,如果我继续我疯狂的枚举计划,我将最终在thedailywtf.com上展示,所以我放弃了这个想法。 :)

再次感谢。