داعيا F # وظائف من C # والحصول على استثناءات مرجع فارغة
سؤال
وأنا باستخدام Visual Studio 2008 مع أكتوبر 2009 F # CTP تثبيت.
وأنا أحاول أن استدعاء بعض F # رمز من بلدي C # البرنامج. يبدو أن معظم أنواع F # وظائف للعمل، ولكن البعض لا تحصل على تهيئة في F # ورمي NullReferenceExceptions. تلك هي تفعل هذا الإغلاق وظائف تطبيقها جزئيا، أي الأشياء التي تظهر في C # كما FastFunc <> أنواع.
هل هناك شيء أفعله خطأ أو نسيان، أو غير هذا من المحتمل وجود خطأ مع F # .NET أو؟
رمز أدناه هو التجريبي المشكلة. أنا لا أسعى في الواقع إلى استخدام هذا الرمز في تطبيق حقيقي. م> أيضا، ضمن F #، كل شيء يعمل بشكل صحيح. هذا هو F # -to-C # مشكلة م>
و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 # (المراجع F # المشروع و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
المحلول
وكان يعمل للي، والحصول على "ما الأمر مرحبا"، "System.Object1"، "System.Object1" لالجزئي والإغلاق وclosureWrapper دوال اللغة. هل الرجوع إلى الجمعية FSharp.Core جيد؟