在C#中实现Rust枚举的最佳方法是什么?

Max*_*kov 6 c# enums

我有一个可以处于不同状态之一(StateA,StateB和StateC)的实体,并且在每个实体中都有不同类型的相关数据(TStateA,TStateB,TStateC)。Rust中的枚举完美地代表了这一点。在C#中实现这样的最佳方法是什么?

这个问题可能看起来相似,但是Rust中的枚举和C中的并集有很大不同。

Ian*_*ose 7

您需要一个类来代表您的实体

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# 中可能不是最佳选择。


twe*_*llt -3

从未在 Rust 中做过任何事情,但查看文档,我觉得你必须实现教科书 C# class。由于 Rust 枚举甚至支持各种类型的函数和实现。

可能是一个抽象类