其他分享
首页 > 其他分享> > 我可以在重载的结构运算符中使用常量参数吗?

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

作者:互联网

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