我试图将F#项目添加到我的C#解决方案中。我创建了一个F#项目并编写了一些F#代码,现在我正在尝试从我的C#项目中使用它。 我成功地引用了F#项目,并且可以访问它的类型,但存在区别联合的问题。例如,我有以下的F#中定义的类型:在C#中创建F#已识别的联合类型
namespace Sample
type NotificationReceiverUser = NotificationReceiverUser of string
type NotificationReceiverGroup = NotificationReceiverGroup of string
type NotificationReceiver = NotificationReceiverUser | NotificatonReceiverGroup
我可以直接创建NotificationReceiverUser对象如下:
var receiver = NotificationReceiverUser.NewNotificationReceiverUser("abc");
,但我需要NotificationReceiver对象,我没有收到NotificationReceiver.NewNotificationReceiverUser或NotificationReceiver.NewNotificationReceiverGroup静态方法。看看其他一些SO问题,它看起来像这些方法应该默认可用。希望能够指出他们为什么错过我的任何指针。
是的,你是正确的,我错过了一个“标签”。添加完成后,C#端的一切都运行良好。虽然非法类型T = string |的事实int编译成功并没有给我对F#的更多信心。 –
你误会了。输入'T = string | int'不会编译。尝试一下。你所做的是一个没有数据的联合 - 基本上是一个枚举,就像'type T = A | B'。该枚举的标签恰好与前面定义的两个类型名称相同,但这并不违法,这很好,DU个案可以与类型名称冲突。 –
好的谢谢澄清。 –