我可以在重载的结构运算符中使用常量参数吗?
作者:互联网
我可以在.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作为目标框架
>如果我在同一项目中使用它,则编译有效
>如果删除l和r的in修饰符,则编译有效
>使用ref修饰符fo和r失败,并显示错误CS0631
>我的环境:VS 2017 15.5.5社区
解决方法:
这是一个已向团队报告此问题的编译器错误:Use in-parameter operator from different assembly.看起来该修补程序已经掌握,但是我可以确认问题仍然存在于15.5.6中.
标签:c-7-2,operator-overloading,struct,c 来源: https://codeday.me/bug/20191109/2012925.html