【问题标题】:F# infix operators in c#?C# 中的 F# 中缀运算符?
【发布时间】:2020-12-10 06:24:07
【问题描述】:

在 F# 中,为二元运算符声明中缀运算符并不少见。但是如果我们尝试在 C# 中使用它们,它们是如何表示的?因为在 C# 中无法声明中缀运算符?

玩具示例

let ( .|. ) a b = a + b

【问题讨论】:

  • C#中不能定义新的运算符,只能重新定义现有的运算符,如+、-、*、/、>、>、|、&、%、==、 !=, .
  • 值得注意的是,经过几年人们创造了几乎任何可以想象的中缀运算符之后,现在无缘无故地这样做被认为是一种糟糕的风格。当两个或多个库都使用相同的中缀运算符时,您将无法判断代码在做什么

标签: c# f# infix-operator


【解决方案1】:

如果您检查运算符的 IL 表示,您将看到:

 .method public static specialname int32
    op_DotBarDot(
      int32 a,
      int32 b
    ) cil managed

很遗憾,您将无法通过C# 引用此内容。但是你可以添加一个属性:

[<CompiledName("addop")>]
let ( .|. ) a b = a + b

然后您可以从 C# 中引用您的 F# dll 并通过 addop 调用它:

Console.WriteLine(global::Program.addop(1,2));

3

进程以退出代码 0 结束。

【讨论】:

  • 谢谢。我最终只是想在一个玩具项目中看到它,你可以参考它,但是 -+- barplusbar 的名称或类似的东西。这是毫无意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2011-02-18
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多