使用C#中的F#Discriminated Unions的最佳方法是什么?
我一直在深入研究这个问题,我可能找到了最简单的方法,但由于它相当复杂,可能还有其他一些我看不到的东西......
有一个有区别的联盟,例如:
type Shape =
| Rectangle of float * float
| Circle of float
Run Code Online (Sandbox Code Playgroud)
我发现C#的用法是(避免使用变量,使类型明显):
Shape circle = Shape.NewCircle(5.0);
if (circle.IsCircle)
{
Shape.Circle c = (Shape.Circle)circle;
double radius = c.Item;
}
Run Code Online (Sandbox Code Playgroud)
在C#中,NewXXXX静态方法总是创建Shape类的对象,还有一种方法IsXXXX来检查对象是否属于该类型; 当且仅当它是,它可以转换为Shape.XXXX类,并且只有它的项目可访问; Shape.XXXX类的构造函数是内部的,即无法访问.
有人知道从一个受歧视的联盟获取数据的更简单的选择吗?