如何在C#中最好地使用F#判别联合?
我已经研究了这个问题一段时间了,可能找到了最简单的方法,但由于它相当复杂,可能还有其他我没有看到的东西...
拥有一个判别联合,例如:
type Shape =
| Rectangle of float * float
| Circle of float
我发现在C#中使用的方式是(避免使用vars,以使类型明显):
Shape circle = Shape.NewCircle(5.0);
if (circle.IsCircle)
{
Shape.Circle c = (Shape.Circle)circle;
double radius = c.Item;
}
在C#中,NewXXXX
静态方法总是创建 Shape
类的对象,还有一个方法 IsXXXX
用于检查对象是否为该类型;只有在是的情况下,它才能强制转换为 Shape.XXXX
类,并且只有这样才能访问其项。 Shape.XXXX
类的构造函数是内部的,即无法访问。
是否有人知道从带判别联合的数据中获取数据的更简单的选项?
dynamic
。dynamic circle = ...; double radius = circle.Item;
- nawfaldynamic
将阻止您对类型进行静态分析(区分联合的主要优点之一)。 - Mauricio Scheffer