Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用enum表示C中的id#_C#_Types - Fatal编程技术网

C# 用enum表示C中的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的常量。 无论哪种方式,它们都是标准的,而不是定制的。为什

我在内部使用纯整数来表示一些ID,但我需要一个常量来表示空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上,所以我会放弃