泛型 C# 的重载运算符[重复]

2024-03-26

我想创建一个支持连接到另一个过程的过程类,如下所示: a|b|c|d (这应该导致过程采用 a 的输入类型,并给出 d 的输出类型)

class Procedure<I,O>
{
  public Func<I,O> func;
  public Procedure(Func<I, O> func)
  { this.func = func; }
  public static Procedure<I, O> operator| (Procedure<I, M> proc1, Procedure<M, O> proc2)
  { return new Procedure<I,O>((x) => proc2.Process(proc1.Process(x))); }
  public O Process(I input)
  { return func.Invoke(input); }
}

编译器抱怨它找不到 M。通常我会在方法名称后面添加,但在这种情况下,它被识别为运算符名称的一部分。做什么?

顺便说一句,我正在尝试将我的 Scala 库移到 C# 中。


你不能这样做,因为M不是以下类型的参数Procedure类,你不能定义它operator |- 这是 C# 的限制。 要解决这个问题,请使用方法,而不是运算符:

public static Procedure<I, O> Composition<M>(Procedure<I, M> proc1, Procedure<M, O> proc2)
    {
        return new Procedure<I, O>((x) => proc2.Process(proc1.Process(x)));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泛型 C# 的重载运算符[重复] 的相关文章

随机推荐