为什么我们不能在C#项目中使用F#类?
最终,它都是CIL,不是吗?
我们有什么理由不能将F#源文件添加到C#项目中吗?
我有以下C#代码.
namespace MyMath {
public class Arith {
public Arith() {}
public int Add(int x, int y) {
return x + y;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想出了名为testcs.fs的F#代码来使用这个对象.
open MyMath.Arith
let x = Add(10,20)
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令
fsc -r:MyMath.dll testcs.fs
我收到此错误消息.
/Users/smcho/Desktop/cs/namespace/testcs.fs(1,13): error FS0039: The namespace 'Arith' is not defined /Users/smcho/Desktop/cs/namespace/testcs.fs(3,9): error FS0039: The value or constructor 'Add' is not defined
可能有什么问题?我在.NET环境中使用mono.
我有这个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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个引用DLL的F#app:
open TestCSProject
printfn "%d" (TestClass.Instance.Add(10,20))
Run Code Online (Sandbox Code Playgroud)
没有人启动Instance静态变量.猜猜F#app的输出是什么?
this is null 30 Press any key to continue . . .
经过几次测试后我发现除非我使用this(例如访问实例字段),否则我不会得到NullReferenceExpcetion.
这是F#编译/ CLR中的预期行为还是差距?
你有一个C#项目的解决方案.SomeComp.Framework是名称.您将F#项目添加到解决方案中.您在F#项目中引用SomeComp.Framework项目.您将脚本文件 - test.fsx插入到F#项目中.在脚本文件中引用C#程序集的正确方法是什么?
#r "SomeComp.Framework.dll" // doesn't work
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有硬编码路径的情况下做到这一点?.fsx文件是否从F#项目中获取任何设置/属性?