Каковы наилучшие способы использования F # Discriminated Unions из С#?
Я некоторое время копался в этой проблеме, я, вероятно, нашел самый простой способ, но, поскольку он довольно сложный, может быть и другое, чего я не вижу...
Наличие дискриминационного объединения, например:
type Shape =
| Rectangle of float * float
| Circle of float
использование С#, которое я нашел, будет (избегая использования vars, чтобы сделать тип очевидным):
Shape circle = Shape.NewCircle(5.0);
if (circle.IsCircle)
{
Shape.Circle c = (Shape.Circle)circle;
double radius = c.Item;
}
В С# статические методы NewXXXX
всегда создают объект класса Shape
, также существует метод IsXXXX
для проверки того, является ли объект типом; если и только если "да", то он поддается классу Shape.XXXX
, и только тогда его элементы доступны; конструктор классов Shape.XXXX
является внутренним, то есть недоступным.
Кто-нибудь знает о более простой опции для получения данных от дискриминационного объединения?