Tag: f#

在C#中使用F#选项类型

我有以下类型: and ListInfo() = let mutable count = 0 // This is a mutable option because we can’t have an infinite data structure. let mutable lInfo : Option = None let dInfo = new DictInfo() let bInfo = new BaseInfo() member this.BaseInfo = bInfo member this.DictInfo = dInfo member this.LInfo with get() = lInfo and […]

F#/ .NET null实例奇怪

我有这个C#DLL: namespace TestCSProject { public class TestClass { public static TestClass Instance = null; public int Add(int a, int b) { if (this == null) Console.WriteLine(“this is null”); return a + b; } } } 这个引用DLL的F#app: open TestCSProject printfn “%d” (TestClass.Instance.Add(10,20)) 没有人启动Instance静态变量。 猜猜F#app的输出是什么? 这是空的 三十 按任意键继续 。 。 。 经过几次测试后,我发现除非我使用this (例如访问实例字段),否则我不会得到NullReferenceExpcetion。 这是F#编译/ CLR中的预期行为还是差距?

使用C#或F#查找包含单个字符的字符串排列

我想生成一个包含变量字符列表的字符串的所有可能排列的列表。 例如,如果我有字符串“ABC”,我希望有一个包含所有可能变体的列表,例如:A,B,C,AB,BC。 谢谢。

在C#中使用F#数据类型

更具体地说,我真的想要一个不可变/共享的链表,我认为拥有不可变的地图和集合也会很好。 只要我不必担心核心实现,我就可以轻松添加扩展方法/子类/包装它,为我自己提供一个合理的外部接口。 我有什么理由不这样做吗? 性能,不兼容性等?

如何在F#中创建一个值类型的Union类型?

普通F#区分联合是引用类型。 如何在F#中创建一个简单的 (非递归的,只有值类型的字段)联合类型,它是一个值类型? 根据一些互联网搜索,我当前(非工作)的尝试看起来如下: [] type Float = [] [] val mutable Val1 : float [] [] val mutable Int1 : int new (a:float) = {Val1 = a} 以下博客文章显示通过C#显示可能的内容 我知道上面的内容不是F#的习惯用法,但我试图优化我的部分应用程序的性能,并且分析清楚地表明堆分配(JIT_new)的成本是导致我的性能瓶颈的原因。一个简单的联合类型是满足我需求的完美数据结构,而不是堆分配的。

从F#调用C#函数

我试图从f#调用这个函数 http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.cloudstorageaccount.setconfigurationsettingpublisher.aspx function签名是: CloudStorageAccount.SetConfigurationSettingPublisher (Action<string, Func>) : unit C#调用是这样的: CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSettingPublisher) => { string configValue = “something” configSettingPublisher(configValue); }); 而在F#中,我必须做这样的事情: let myPublisher configName (setter:Func) = let configValue = RoleEnvironment.GetConfigurationSettingValue(configName) setter.Invoke(configName) |> ignore let act = new Action<string, Func>(myPublisher) CloudStorageAccount.SetConfigurationSettingPublisher(act) 这可以在f#中更简洁地写出来吗?

在C#列表和F#列表之间转换

备注:这是一个自我记录,但如果您有任何其他建议,或者如果我犯了任何错误/错过了明显的事情,我将非常感谢您的帮助。 资料来源: 将.NETgenerics列表转换为F#列表 如何将列表从C#传递给F#? https://msdn.microsoft.com/en-us/library/4kf43ys3(v=vs.110).aspx?cs-save-lang=1&cs-lang=fsharp#code-snippet-1 我是F#和C#的初学者,我想将C#List转换为F#List,反之亦然。 执行此操作的代码/命令会根据代码的位置(在C#或F#中)而更改。 请参阅下面的答案。 如果您有任何其他建议,请告诉我。 谢谢。

如何将Linq表达式从F#传递给C#代码

ReactiveUI的方法有像 public static ReactiveUI.ObservableAsPropertyHelper ObservableToProperty( this TObj This, System.IObservable observable, System.Linq.Expressions.Expression<System.Func> property, TRet initialValue = null, System.Reactive.Concurrency.IScheduler scheduler = null ) 在F#中我如何构造一个像这样的对象 System.Linq.Expressions.Expression<System.Func> property, 在C#中,我会做类似的事情 this.ObservableAsPropertyHelper( observable, me => me.MyProperty ) 编辑 我试过了 m.ObservableToProperty(this, value, fun me -> me.Property ) 和 m.ObservableToProperty(this, value, new Linq.Expression.Expression(fun me -> me.Property ) 但都没有工作

在CoreCLR中运行F#

我按照这里描述编译了CoreCLR和CoreFX 。 基本上,我可以编译和运行针对CoreCLR的C#代码。 下一步是尝试编译和运行F#代码。 所以我将FSharp.Core 3.1.2.1添加到项目中,并使用以下命令编译了一个示例应用程序: fsc ^ –noframework ^ –targetprofile:netcore ^ /r:packages\System.Runtime.4.0.20-beta-22703\lib\contract\System.Runtime.dll ^ /r:packages\System.Reflection.4.0.10-beta-22703\lib\contract\System.Reflection.dll ^ /r:packages\System.Collections.4.0.10-beta-22703\lib\contract\System.Collections.dll ^ /r:packages\System.Diagnostics.Debug.4.0.10-beta-22703\lib\contract\System.Diagnostics.Debug.dll ^ /r:packages\System.IO.FileSystem.4.0.0-beta-22703\lib\contract\System.IO.FileSystem.dll ^ /r:packages\System.Linq.Expressions.4.0.10-beta-22703\lib\contract\System.Linq.Expressions.dll ^ /r:packages\System.Console.4.0.0-beta-22703\lib\contract\System.Console.dll ^ /r:packages\System.Runtime.Extensions.4.0.10-beta-22703\lib\contract\System.Runtime.Extensions.dll ^ /r:packages\System.Runtime.InteropServices.4.0.20-beta-22703\lib\contract\System.Runtime.InteropServices.dll ^ /r:packages\System.Text.Encoding.4.0.10-beta-22703\lib\contract\System.Text.Encoding.dll ^ /r:packages\System.Text.RegularExpressions.4.0.10-beta-22703\lib\contract\System.Text.RegularExpressions.dll ^ /r:packages\System.Threading.Overlapped.4.0.0-beta-22703\lib\contract\System.Threading.Overlapped.dll ^ /r:packages\System.Threading.ThreadPool.4.0.10-beta-22703\lib\contract\System.Threading.ThreadPool.dll ^ /r:packages\FSharp.Core.3.1.2.1\lib\portable-net45+netcore45+MonoAndroid1+MonoTouch1\FSharp.Core.dll ^ /out:runtime\HelloWorld.exe HelloWorld.fs 正如您所看到的,我构建了FSharp.Core的Profile7。 当我运行应用程序时,语句let test = sprintf “Hello, world”失败,出现以下exception: Unhandled Exception: System.IO.FileNotFoundException: Could not load […]

看到C#windows形成了来自F#的项目代码

我有一个C#Windows窗体项目,其中包含一些C#代码。 问题:我如何拥有一个F#文件,我可以编写F#代码,但仍然引用我在Form1.cs上的所有C#代码(包括GUI)。 我能成功地做到这一点: – 创建C#Windows窗体项目 – 创建一个F#Library项目 – 从我的C#项目引用F#Library DLL – 这样我可以从C#调用F#函数 但是我还是看不到来自F#的按钮和文本框 我理解那是因为它是一个库,它不能引用System.Windows.Forms 那么我该如何解决这个问题呢? 我不希望它是一个库或者这个或那个,我只是希望它是一个允许我编写F#代码的文件,同时能够引用我的C#表单和代码。 我想你可以说我想要一个F#文件,它也是一个“部分类Form1”,这样我就可以继续为同一个Project编写代码,但是使用F#代替。 我怎么做?