داعيا F # وظائف من C # والحصول على استثناءات مرجع فارغة

StackOverflow https://stackoverflow.com/questions/1633562

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا باستخدام 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 جيد؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top