2014-01-06 53 views
0

我一直在尋找將F#代碼塊導入C#應用程序的解決方案(以獲得一些操作的計算速度)。因此我在MS Visual Studio Express 2013中安裝了FSharpx.Core到我的C#解決方案。 就是這樣......不知道如何繼續:-)將F#代碼塊導入到C#應用程序

有人可以幫助我使用一些簡單的代碼 - 例如,當我單擊表單中的一個按鈕時,減去變量v1和v2。

Form1.cs的

... 
private void buttonCalcVars_Click(object sender, EventArgs e) 
{ 
     int sum = CallFSharpFunction(1,2); 
} 

// This should be some F# block of code 
private int CallFSharpFunction(int a, int b) 
{ 
    let v1 = a; 
    let v2 = b; 
    // do some calculations 

    return result; 
} 
... 

希望這是可能的, 謝謝!

+5

我不確定是否有更好的方法,但您可以簡單地將F#項目添加到您的解決方案(作爲DLL)並將其引用到您的C#項目中。那麼你應該可以從C#調用F#方法。 – Luaan

回答

0

在使用F#的一個奇蹟之前,您可以在用C#編寫的應用程序中使用F#函數。 熟悉功能語言F#你可以,例如,在這個地址:http://msdn.microsoft.com/ru-ru/magazine/cc164244.aspx 但在這裏,在我看來,F#功能語言是寫好各種數學函數的好方法(原諒我的重言式),但爲什麼要從麪包面向對象的語言,爲什麼把不知所云的代碼與F#中的WinForms或WebForms控件頁面一起使用?因爲我立即想知道如何從F#程序集調用一個函數。只是想說,因爲在編寫代碼時使用tipizaciâmi函數語言存在困難,所以在使用C#程序集中的F#函數時,這些困難只會增加。開始做生意。 創建一個包含C#控制檯應用程序和F#程序集的項目。 裝配中的F#我們需要一個文件MyFunctions。 FS。這裏我們介紹一些我們認爲用功能性語言編寫的特性。例如,即使是從RGB到YCbCr色彩空間的轉換函數數組位圖圖像(這只是一個示例)。進入F#中可以大致是這樣的:

open System 
let RGB_to_YCbCr (r : double,g : double,b : double) = 
    let y = 0.299 * r + 0.587 * g + 0.114 * b in 
    let Cb = (-0.1687) * r - 0.3313 * g + 0.5 * b + 128.0 in 
    let Cr = 0.5 * r - 0.4187 * g - 0.0813 * b + 128.0 in 
    (y,Cb,Cr); 

let RGB_to_YCbCr_v (v : _ array) = 
    RGB_to_YCbCr (v.[0], v.[1], v.[2]); 
let Process (image : _ array) = 
    let lenght = Array.length image in 
    let imageYCbCr = Array.create lenght (0.0, 0.0, 0.0) in 
    for index = 0 to lenght - 1 do 
     imageYCbCr.[index] <- RGB_to_YCbCr_v (image.[index]) 
    done 
    imageYCbCr 

大會之後,我們可以看到,進入功能不只是有奇怪的意見命名空間,以及如何使用它們並不清楚。查看Assembly中我們可以使用Reflector的函數的位置。 爲了描述名稱空間和類,您需要在#light後立即添加以下行: module FSharp.Sample.MyFunctions 即,所有下面寫的函數都將包含類MyFunctions fsharp.Core命名空間。 重新項目後,我們將看到在大會有一個清晰的fsharp.Core命名空間示例具有類MyFunctions靜態方法,我們已經在上面描述。 在我們的控制檯應用程序中閱讀更多內容,我們將參考設置爲Assembly,fsharp.core Sample是我的Assembly的名稱,以F#和fsharp.core - 爲了使用F#type Triple的類型(類)。並寫下如下代碼:

using System; 
using FSharp.Sample; 
namespace CSharp.Sample.Console 
{ 
    class Program 
    { 
     static void Main() 
     { 
      double[][] image = new double[1000][]; 
      Random rand = new Random(); 
      for (int i = 0; i < 1000; i ++) 
      { 
       image[i] = new double[3]; 
       image[i][0] = rand.Next(); 
       image[i][1] = rand.Next(); 
       image[i][2] = rand.Next(); 
      } 
      foreach (var doubles in MyFunctions.Process(image)) 
      { 
       System.Console.WriteLine(doubles); 
      } 
     } 
    } 
} 

最初我們指定使用fsharp.Core命名空間。在代碼中,我們生成一組數據並將其傳遞給函數MyFunction。處理,將其轉換爲選定的算法。我們返回的數據類型爲「Microsoft fsharp.core .. Tuple'3」。

相關問題