相关疑难解决方法(0)

F#从C#中区分联盟使用

使用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类的构造函数是内部的,即无法访问.

有人知道从一个受歧视的联盟获取数据的更简单的选择吗?

c# f# c#-to-f#

16
推荐指数
2
解决办法
4484
查看次数

如何在C#中复制F#区分联合类型?

我创建了一个名为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)

c# f# discriminated-union

13
推荐指数
3
解决办法
3409
查看次数

C#中的FSharpChoice

我想FSharpChoice在C#项目中使用type.我创造了一个这样的选择

var a = FSharpChoice<T1,T2,T3>.NewChoice1Of3(instofT1);
Run Code Online (Sandbox Code Playgroud)

现在我如何instofT1摆脱选择类型.

我看到我可以做一个,IsChoice1Of3但我如何得到选择对象中的值?

c# f#

6
推荐指数
2
解决办法
1307
查看次数

标签 统计

c# ×3

f# ×3

c#-to-f# ×1

discriminated-union ×1