Aufruf F # Funktionen von C # und immer null Referenz Ausnahmen
Frage
Ich bin mit Visual Studio 2008 mit dem Oktober 2009 F # CTP installiert.
Ich versuche, einige F # Code von meinem C # Programm zu nennen. Die meisten Arten von F # Funktionen zu funktionieren scheint, aber einige sind nicht in F # initialisiert zu werden und NullReferenceExceptions werfen. Die, die dies tun, sind Schließungen und teilweise angewendet Funktionen, das heißt Dinge, die als FastFunc <> Typen in C # erscheinen.
Gibt es etwas, was ich falsch mache oder zu vergessen, oder ist dies möglicherweise ein Problem mit F # oder .NET?
den Code unten, um das Problem Demo. Ich bin nicht wirklich versucht, diesen Code in einer realen Anwendung zu verwenden. auch innerhalb von F #, funktioniert alles korrekt. dies ist ein F # -bis-C # Problem
F #:
namespace FS
module FunctionTypes =
//these all work in c# as expected
let Value = "value"
let OneParam (str:string) = str
let TwoParam (str:string) (str2:string) = str + " " + str2
let Lambda =
fun () -> "lambda"
//these functions are null references in C#
// they do work as expected in F# interactive mode
let PartialApplication = TwoParam "what's up"
let Closure =
let o = new System.Object()
fun (i:int) -> o.ToString() + i.ToString()
let ClosureWrapper (i:int) =
Closure i
C # (Referenzen F # -Projekt und FSharp.Core)
//these work as expected:
var oneParam = FS.FunctionTypes.OneParam("hey");
var twoParam = FS.FunctionTypes.TwoParam("yeah", "you");
var lambdaFunction = FS.FunctionTypes.Lambda();
var value = FS.FunctionTypes.Value;
// in the May09 CTP, Value returned null,
// so it must have been fixed in Oct09 CTP
//these do not work--each throws a NullReferenceException.
var partial = FS.FunctionTypes.PartialApplication.Invoke("hello");
var closure = FS.FunctionTypes.Closure.Invoke(1);
var closureWrapper = FS.FunctionTypes.ClosureWrapper(1);
// FS.FunctionTypes.Closure itself is null,
// so is FS.FunctionTypes.PartialAppliction.
// FS.FunctionTypes.ClosureWrapper is a regular function,
// but it calls Closure, which is null
Lösung
Es funktioniert für mich, ich bekomme „was los ist hallo“, „System.Object1“, „System.Object1“ für partielle Schließung und closureWrapper Vars. Verweisen Sie die gute FSharp.Core Montage?