【问题标题】:Can I use constant parameters in overloaded struct operators?我可以在重载的结构运算符中使用常量参数吗?
【发布时间】:2018-07-25 12:12:24
【问题描述】:

我可以在.NET Core 2.0 类库中定义以下不可变结构:

public struct S {

    public readonly int v;

    public S(int value) => v = value;

    public static S operator +(in S l, in S r)
        => new S(l.v + r.v);

}

在第二个项目(.NET Core 2.0 控制台应用程序)中,我尝试使用重载运算符。因此,我在库项目中添加了项目引用。但是下面的代码编译失败:

class Program {

    static void Main(string[] args)
        => Console.WriteLine((new S(4) + new S(3)).v);

}

错误信息:

错误 CS0019:运算符“+”不能应用于“S”和“S”类型的操作数

详情:

  • 我已将两个项目配置为使用最新的 C# 版本 (C# 7.2)
  • 使用.NET CORE 2.0 作为目标框架
  • 如果我在同一个项目中使用它,编译就可以工作
  • 如果我删除 in 修饰符 lr
  • 使用 ref 修饰符 fo lr 失败并出现 ERROR CS0631
  • 我的环境:VS 2017 15.5.5 社区

【问题讨论】:

    标签: c# struct operator-overloading c#-7.2


    【解决方案1】:

    这是已在此问题中向团队报告的编译器错误:Use in-parameter operator from different assembly。看起来修复在 master 中,但我可以确认问题在 15.5.6 中仍然存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多