J'essaie d'appeler une fonction C# d'une bibliothèque déjà existante (et je ne suis pas le temps au port toute bibliothèque F #)Interop avec des paramètres passés par ref
namespace ExportLib
{
public static class Xlsx
{
public static bool TestSave(string proposed, ref string filename, ref string save_log) {
d'un code F #
let getUserFile(proposed) : UserFile =
let mutable filename = ""
let mutable save_log = ""
match Xlsx.TestSave(proposed, ref filename, ref save_log) with
| true -> FileResult(filename)
| false -> ErrorMsg(save_log)
destiné à transformer la fonction en types de données algébriques avec l'objectif de rendre les États illégaux unrepresentable.
type UserFile =
// The value here is the file path.
| FileResult of string
// The value here is the error msg.
| ErrorMsg of string
Mon problème est que le mutable
F # filename
reste inchangé malgré qu'il est affecté dans la fonction C# (même problème avec out string
au lieu de ref string
)
C'est vrai. Alternativement, vous devriez pouvoir conserver les déclarations telles qu'elles étaient et passer des références en utilisant '& filename' et' & save_log'. – kvb