我有一个可以处于不同状态之一(StateA,StateB和StateC)的实体,并且在每个实体中都有不同类型的相关数据(TStateA,TStateB,TStateC)。Rust中的枚举完美地代表了这一点。在C#中实现这样的最佳方法是什么?
这个问题可能看起来相似,但是Rust中的枚举和C中的并集有很大不同。
您需要一个类来代表您的实体
class Entity {States state;}
Run Code Online (Sandbox Code Playgroud)
然后你需要一组类来代表你的状态。
abstract class States {
// maybe something in common
}
class StateA : MyState {
// StateA's data and methods
}
class StateB : MyState {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后你需要编写类似的代码
StateA maybeStateA = _state as StateA;
If (maybeStateA != null)
{
- do something with the data in maybeStateA
}
Run Code Online (Sandbox Code Playgroud)
C# 还没有为此编写代码的好方法,也许C#.next 正在考虑的模式匹配会有所帮助。
我认为您应该重新考虑您的设计以使用对象关系和包含,尝试采用适用于 C# 的设计rust并将其强制到 C# 中可能不是最佳选择。