C# 用enum表示C中的id#
我在内部使用纯整数来表示一些ID,但我需要一个常量来表示空ID,当我在玩的时候,我意识到这会起作用:C# 用enum表示C中的id#,c#,types,C#,Types,我在内部使用纯整数来表示一些ID,但我需要一个常量来表示空ID,当我在玩的时候,我意识到这会起作用: public enum ID : int { Null = -1 } 例如: ID myID = ID.Null; 这是个坏主意吗? 仅仅使用普通整数更糟糕吗? 如果这是一个问题,那么表示ID的最佳方式是什么 谢谢。为什么不使用可为空的int可为空或int? 编辑 或者,如果您不喜欢,请使用内置的int.MinValue作为表示空id的常量。 无论哪种方式,它们都是标准的,而不是定制的。为什
public enum ID : int { Null = -1 }
例如:
ID myID = ID.Null;
这是个坏主意吗?仅仅使用普通整数更糟糕吗?
如果这是一个问题,那么表示ID的最佳方式是什么
谢谢。为什么不使用可为空的int<代码>可为空或
int?
编辑或者,如果您不喜欢,请使用内置的
int.MinValue
作为表示空id的常量。
无论哪种方式,它们都是标准的,而不是定制的。为什么不使用可为空的int<代码>可为空或
int?
编辑或者,如果您不喜欢,请使用内置的
int.MinValue
作为表示空id的常量。
无论哪种方式,它们都是标准的,而不是定制的。为什么不像您在问题中所说的那样使用常量呢?如果您想拥有一系列“神奇”ID,我认为使用枚举是一种与任何方法一样好的方法
正如另一张海报所建议的,使用一个内置常量,如int.MinValue,几乎肯定是最好的选择。为什么不像你在问题中所说的那样,只使用一个常量呢?如果您想拥有一系列“神奇”ID,我认为使用枚举是一种与任何方法一样好的方法
正如另一张海报所建议的,使用int.MinValue之类的内置常量几乎肯定是最好的选择。您只需要一个值Null?如果是这样的话,我会使用常量
还取决于作用域-如果您在类内、跨多个类或从一个程序集到另一个程序集使用此枚举。如果您使用的是enum交叉汇编,则需要注意一种奇怪的情况(我目前找不到任何引用,也记不清确切的细节),即enum名称和值可能看起来不同步-尽管我认为您可以通过显式定义值来避免这种情况,就像您在这里所做的那样。您只需要一个值,无效的如果是这样的话,我会使用常量
还取决于作用域-如果您在类内、跨多个类或从一个程序集到另一个程序集使用此枚举。如果您使用的是enum交叉汇编,则需要注意一种奇怪的情况(我目前找不到任何引用,也记不清确切的细节),即enum名称和值可能看起来不同步-尽管我认为您可以通过显式定义值来避免这种情况,就像您在这里所做的那样。,但我更喜欢使用enumerations(在许多情况下)而不是简单常量。这是因为枚举表示比常量更详细的内容,您可以在许多情况下和许多用法中使用枚举 我还认为,您不是在表示“语言null”,而是在表示“常规null”,事实上,您正在将ID设置为值为-1的枚举值,因此这很好地说明了您打算做什么以及我所说的,出于这个原因,如果您要使用“语言null”使用可为null的
null
或int?
仍然是一个好主意
在某些情况下,例如使用ORM或类似工具时,最好定义一种未设置的值,而不是空值,因此使用枚举可能很有用,正如我之前所说的
最后,我认为,更好地考虑需要表示哪种空值取决于我认为,但我更喜欢使用enumerations(在许多情况下)而不是简单常量。这是因为枚举表示比常量更详细的内容,您可以在许多情况下和许多用法中使用枚举 我还认为,您不是在表示“语言null”,而是在表示“常规null”,事实上,您正在将ID设置为值为-1的枚举值,因此这很好地说明了您打算做什么以及我所说的,出于这个原因,如果您要使用“语言null”使用可为null的
null
或int?
仍然是一个好主意
在某些情况下,例如使用ORM或类似工具时,最好定义一种未设置的值,而不是空值,因此使用枚举可能很有用,正如我之前所说的
最后,我想,最好想想你需要用什么样的空值来表示谢谢你的回答。我想我喜欢这一点,首先它使我的代码比使用普通int或int更容易阅读?无需单独ID类的不必要开销,例如:
int? myId = getAnIDFromSomewhere();
vs:
其次,它将类型和Null常量绑定到一个包中(当然,哪个int?也可以)。另一方面,它感觉有点不对劲,因此我的问题就在这里
导致我这样做的一件事是,我不能在返回/使用ID的接口上包含NullID常量(因为C#不允许),这感觉也不对(因为返回NullID的可能性似乎是该接口的一部分)
无论如何,我认为这里的回答清楚地表明,如果我继续我疯狂的枚举计划,我最终会出现在Dailywtf.com上,所以我放弃了这个想法。:)
再次感谢。谢谢你的回答。我想我喜欢这一点,首先它使我的代码比使用普通int或int更容易阅读?无需单独ID类的不必要开销,例如:
int? myId = getAnIDFromSomewhere();
vs:
其次,它将类型和Null常量绑定到一个包中(当然,哪个int?也可以)。另一方面,它感觉有点不对劲,因此我的问题就在这里
导致我这样做的一件事是,我不能在返回/使用ID的接口上包含NullID常量(因为C#不允许),这感觉也不对(因为返回NullID的可能性似乎是该接口的一部分)
不管怎样,我认为这里的回答清楚地表明,如果我继续我疯狂的枚举计划,我最终会出现在dailywtf.com上,所以我会放弃