C# 如何基于当前值指定枚举可以具有的值?
我正在寻找一种方法来指定一个让我们称之为决策树或流的方法 我有一个起始值1或已请求,此枚举可以有多个以下值,如2或正在进行或3或已拒绝 现在只有从值2开始,才有可能得到更高的值,比如4或FINISHED 定义流程或流可能具有的路径的最实用的方法是什么?您可以做一些事情来利用枚举基本上只是整数:C# 如何基于当前值指定枚举可以具有的值?,c#,enums,C#,Enums,我正在寻找一种方法来指定一个让我们称之为决策树或流的方法 我有一个起始值1或已请求,此枚举可以有多个以下值,如2或正在进行或3或已拒绝 现在只有从值2开始,才有可能得到更高的值,比如4或FINISHED 定义流程或流可能具有的路径的最实用的方法是什么?您可以做一些事情来利用枚举基本上只是整数: private static Status NextState(Status status) { var intOfStatus = ((int)status) + 1; return (
private static Status NextState(Status status)
{
var intOfStatus = ((int)status) + 1;
return (Status)intOfStatus;
}
以及基于此方法的一些示例逻辑:
public enum Status
{
NotStarted = 0,
Started = 1,
InProgress = 2,
Declined = 3
}
public static void Main()
{
var curStatus = Status.NotStarted;
Console.WriteLine(curStatus.ToString()); //writes 'NotStarted'
if ((int)curStatus++ == (int)Status.Started)
{
curStatus = Status.Started;
}
Console.WriteLine(NextState(curStatus)); //writes 'InProgress'
}
您可以做一些事情来利用枚举基本上只是整数:
private static Status NextState(Status status)
{
var intOfStatus = ((int)status) + 1;
return (Status)intOfStatus;
}
以及基于此方法的一些示例逻辑:
public enum Status
{
NotStarted = 0,
Started = 1,
InProgress = 2,
Declined = 3
}
public static void Main()
{
var curStatus = Status.NotStarted;
Console.WriteLine(curStatus.ToString()); //writes 'NotStarted'
if ((int)curStatus++ == (int)Status.Started)
{
curStatus = Status.Started;
}
Console.WriteLine(NextState(curStatus)); //writes 'InProgress'
}
实用的往往是最容易阅读和理解的。为此,我建议明确哪些国家可以导致哪些其他国家。
enum
只是一个可能值的列表。使用enum
的int
值可能看起来更简洁,但它更难阅读,并可能导致其他问题
首先,这里有一个enum
和一个简单的类,如果允许更改,它可以从一个状态更改为另一个状态。(我没有涵盖所有州。)
如果我们基于\u state
的数值并确定该数字只能上升,则可能会出现一些问题:
- 有些人可以重新排列枚举或添加新的枚举,而不知道数值或位置具有逻辑意义。这是一个容易犯的错误,因为该值通常并不重要
- 您可能需要实现不太简单的逻辑。您可能需要一个状态,该状态前面可以有一些值,但不是所有值
- 你可能会意识到倒退是有充分理由的。如果请求被拒绝,并且将来您确定要重新打开请求,从而有效地将它们发送回所请求的
,该怎么办
如果这种实现方式开始时有点奇怪,那么这些更改可能会使更改和遵循变得更加困难。但是,如果你只是清楚地描述在任何状态下可能发生的变化,那么它将很容易阅读和修改。实用的往往是最容易阅读和理解的。为此,我建议明确哪些国家可以导致哪些其他国家。
enum
只是一个可能值的列表。使用enum
的int
值可能看起来更简洁,但它更难阅读,并可能导致其他问题
首先,这里有一个enum
和一个简单的类,如果允许更改,它可以从一个状态更改为另一个状态。(我没有涵盖所有州。)
如果我们基于\u state
的数值并确定该数字只能上升,则可能会出现一些问题:
- 有些人可以重新排列枚举或添加新的枚举,而不知道数值或位置具有逻辑意义。这是一个容易犯的错误,因为该值通常并不重要
- 您可能需要实现不太简单的逻辑。您可能需要一个状态,该状态前面可以有一些值,但不是所有值
- 你可能会意识到倒退是有充分理由的。如果请求被拒绝,并且将来您确定要重新打开请求,从而有效地将它们发送回所请求的
,该怎么办
如果这种实现方式开始时有点奇怪,那么这些更改可能会使更改和遵循变得更加困难。但是,如果您只是清楚地描述在任何状态下可能发生的更改,那么它将很容易阅读和修改。我建议使用某种状态机定义业务规则的类/函数。使用当前值调用该函数,并让所有可能的值首先返回下一个逻辑值。我们通常使用按位运算和int。我建议使用排序的状态机定义业务规则的类/函数。用当前值调用它,并让所有可能的值首先返回下一个逻辑值。我们过去使用逐位运算和int。尽管我更明确地回答了这个问题。实际上,我会更倾向于这条路线(并据此投票)。我可以想象,在极少数情况下,迭代可能的状态将真正成为最终目标,但谁知道呢!尽管我对这个问题的回答更加明确。实际上,我会更倾向于这条路线(并据此投票)。我可以想象,在极少数情况下,迭代可能的状态将真正成为最终目标,但谁知道呢!