我正在寻找一种指定let的方法,称为“决策树”或“流程”。
我的起始值为1或REQUESTED,并且该枚举可以具有多个后续值,例如2或IN_PROGRESS或3或DECLINED。
现在只有从值2开始,才有可能将值设为4或FINISHED之类的较高值。
定义过程或流可能具有的路径的最实际方法是什么?
答案 0 :(得分:2)
实用知识通常是最容易理解的内容。为此,我建议明确指出哪些状态可以导致其他状态。 enum
只是可能值的列表。使用int
的{{1}}值看似更简洁,但更难阅读,并可能导致其他问题。
首先,这是一个enum
和一个简单的类,如果允许更改,则该类将从一种状态更改为另一种状态。 (我没有涵盖每个州。)
enum
如果我们将其基于enum RequestState
{
Requested,
InProgress,
Declined,
Finished
}
public class Request
{
private RequestState _state = RequestState.Requested;
public void BeginWork()
{
if (_state == RequestState.Declined || _state == RequestState.Finished)
throw new InvalidOperationException("You can only begin work on a new request.");
_state = RequestState.InProgress;
}
public void Decline()
{
if (_state == RequestState.Finished)
throw new InvalidOperationException("Too late - it's finished!");
_state = RequestState.Declined;
}
// etc.
}
的数值并确定该数字只能递增,则可能会出错:
_state
,该怎么办?如果实现该方法的方法有些怪异,那么这些更改可能使更改和遵循变得更加困难。但是,如果您只清楚地描述在任何状态下可能发生的变化,那么将易于阅读和修改。
答案 1 :(得分:0)
您可以做一些事情来利用枚举基本上只是整数:
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'
}