使用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类的构造函数是内部的,即无法访问.
有人知道从一个受歧视的联盟获取数据的更简单的选择吗?
我创建了一个名为Actor的新类,它处理传递给它的消息.我遇到的问题是弄清楚将相关但不同的消息传递给Actor的最优雅方式是什么.我的第一个想法是使用继承,但它似乎是如此膨胀,但它是强烈的类型,这是一个明确的要求.
有什么想法吗?
private abstract class QueueMessage { }
private class ClearMessage : QueueMessage
{
public static readonly ClearMessage Instance = new ClearMessage();
private ClearMessage() { }
}
private class TryDequeueMessage : QueueMessage
{
public static readonly TryDequeueMessage Instance = new TryDequeueMessage();
private TryDequeueMessage() { }
}
private class EnqueueMessage : QueueMessage
{
public TValue Item { get; private set; }
private EnqueueMessage(TValue item)
{
Item = item;
}
}
Run Code Online (Sandbox Code Playgroud)
/// <summary>Represents a callback method to be executed by …Run Code Online (Sandbox Code Playgroud) 我想FSharpChoice在C#项目中使用type.我创造了一个这样的选择
var a = FSharpChoice<T1,T2,T3>.NewChoice1Of3(instofT1);
Run Code Online (Sandbox Code Playgroud)
现在我如何instofT1摆脱选择类型.
我看到我可以做一个,IsChoice1Of3但我如何得到选择对象中的值?