J'essaie d'ajouter un projet F # à ma solution C#. J'ai créé un projet F # et j'ai écrit du code F #, maintenant j'essaie de l'utiliser depuis mes projets C#. J'ai réussi à référencer le projet F # et j'ai accès à ses types, mais j'ai des problèmes avec les syndicats discriminés. Par exemple, je suis suivant les types définis dans F #:Création d'un type d'union F # discrimée en C#
namespace Sample
type NotificationReceiverUser = NotificationReceiverUser of string
type NotificationReceiverGroup = NotificationReceiverGroup of string
type NotificationReceiver = NotificationReceiverUser | NotificatonReceiverGroup
Je peux créer un objet NotificationReceiverUser directement comme suit:
var receiver = NotificationReceiverUser.NewNotificationReceiverUser("abc");
, mais je dois NotificationReceiver objet, et je ne reçois pas NotificationReceiver.NewNotificationReceiverUser ou Méthodes statiques NotificationReceiver.NewNotificationReceiverGroup. En regardant d'autres questions SO, il semble que ces méthodes devraient être disponibles par défaut. Apprécierait n'importe quel pointeur sur pourquoi ils me manquent.
Oui, vous avez raison, je manque un « tag ». Après l'avoir ajouté, tout a bien fonctionné côté C#. Bien que le type illégal T = string | int compiles avec succès ne me donne pas beaucoup de confiance en F #. –
Vous vous méprenez. Tapez 'T = chaîne | int' ne compilerait pas. Essayez-le. Qu'est-ce que vous avez fait était une union sans données - essentiellement une énumération, comme le type T = A | B'. Les étiquettes de cette énumération ont été nommées de manière identique aux deux types précédemment définis, mais ce n'est pas illégal, c'est bien, les cas de DU sont autorisés à entrer en conflit avec les noms de types. –
Ok merci pour clarifier cela. –