c# - 我可以在重载的结构运算符中使用常量参数吗?

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

我可以在 .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);

}

错误信息:

Error CS0019: Operator '+' cannot be applied to operands of type 'S' and 'S'

详细信息:

  • 我已将两个项目配置为使用最新的 C# 版本 (C# 7.2)
  • 使用 .NET CORE 2.0 作为目标框架
  • 如果我在同一个项目中使用它,编译工作正常
  • 如果我删除 lrin 修饰符,编译就会工作
  • lr 使用 ref 修饰符失败,返回 ERROR CS0631
  • 我的环境:VS 2017 15.5.5 Community

最佳答案

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

关于c# - 我可以在重载的结构运算符中使用常量参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795360/

相关文章:

c# - C# 应该有惰性关键字吗

在 C 中使用动态数组创建对象/typedef 结构

c++结合使用成员函数和重载运算符来过滤传递给流的数据

c++ - 列表中 -> 运算符的语义(以及一般的 C++)

c++ - 是否在编译时解决了重载运算符-> 的调用?

c# - 将身份资料保存在单独的数据库中

c# - 给定一个表示类型的字符串,我需要知道它是值类型还是引用类型

c# - 如何编写自定义模板字段类 DataControlField

c - 如何打印二叉树?

c++ - C++ 'struct name' 中的结构未命名类型