将F#代码块导入C#应用程序

将F#代码块导入C#应用程序,c#,f#,C#,F#,我一直在寻找将F#代码块导入C#应用程序的解决方案(以提高我所做的某些操作的计算速度)。因此,我在MS Visual Studio Express 2013中将FSharpx.Core安装到我的C#解决方案中。 就这样…不知道如何继续:-) 有人能帮我写一些简单的代码吗?例如,当我点击表单中的一个按钮时,减去变量v1和v2 Form1.cs ... private void buttonCalcVars_Click(object sender, EventArgs e) { int

我一直在寻找将F#代码块导入C#应用程序的解决方案(以提高我所做的某些操作的计算速度)。因此,我在MS Visual Studio Express 2013中将FSharpx.Core安装到我的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;
}
...
希望这是可能的,, 谢谢大家!

在使用F#函数之前,你能在用c#编写的应用程序中使用F#函数吗。 熟悉函数式语言F#例如,您可以在以下地址: 但在这里,我认为,函数式语言很适合编写各种数学函数(请原谅我的重言式),但为什么要从面向对象语言中吸取经验,为什么要用难以理解的代码来处理F中的WinForms或WebForms控件页?因为我马上就想知道如何从F#程序集调用函数。我想说的是,由于在函数语言中使用tipizaci–mi编写代码时存在困难,因此在使用C#Assembly中的F#函数的情况下,这些困难只会增加。开始谈正事 创建一个包含C#控制台应用程序和F#程序集的项目。 在程序集中,我们需要一个文件MyFunctions。财政司司长。在这里,我们将介绍一些我们认为用函数式语言编写更容易的功能。例如,即使是将数组位图图像从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
在组装之后,我们可以看到对特性的访问不仅仅是名称空间中的奇怪视图,而且如何使用它们还不清楚。请参阅我们可以使用Reflector的组件中功能的位置。 为了描述名称空间和类,需要在#light之后立即添加以下行: 模块FSharp.Sample.MyFunctions 也就是说,下面编写的所有函数都将包含MyFunctions类fsharp.Core名称空间。 再次完成项目后,我们将看到在程序集中有一个清晰的fsharp.Core名称空间示例,该示例包含类MyFunctions静态方法,我们已经在上面介绍过。 在控制台应用程序中阅读更多内容,我们将对程序集的引用设置为fsharp.core Sample是我的程序集的名称,设置为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中”

我不确定是否有更好的方法,但您可以简单地将一个F#项目添加到解决方案中(作为DLL),并在C#项目中引用它。然后您应该能够从C调用F方法。