我一直在尝试使用 F#,并希望在 C# 项目中尝试将它用于某些将从该语言中受益的代码片段。
我一直在努力弄清楚模块和命名空间在 C# 项目中的使用方式。例如下面的代码:
namespace File1
#light
type File1(path : string) =
static member Trim(p : string) = p.Trim()
member self.Path = path
然后我尝试在 C# 中使用它:
using File1;
class Program
{
static void Main(string[] args)
{
// Doesn't work
Console.WriteLine(File1.Trim(" hello "));
// Does work
Console.WriteLine(File1.File1.Trim(" hello "));
}
}
我明白为什么第二个有效,但为什么第一个无效?我已经使用 using 声明引入了 namespace ,并且 File1 应该是一个类。 Trim 是该类的静态成员。
最佳答案
这不是由 namespace 和类在 F# 中的行为方式引起的,您没看错。
问题是您有一个名为 File1
的命名空间和一个名为 File1
的类。当您在 C# 程序中编写 File1
时,即使您有正确的 using
,它的意思是“namespace File1
”,而不是“class >File1.File1
”。例如,如果您将命名空间的名称更改为 FileNamespace
,并将 type
的名称更改为 FileType
,那么一切都会按预期进行。 (我并不是说您应该在实际项目中使用这样的命名。)
关于c# - F# 命名空间/模块和与 C# 的互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802440/