.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);
}
2番目のプロジェクト(.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
修飾子を削除すると、コンパイルが機能しますl
r
ref
修飾子foを使用するl
とr
、ERROR CS0631
これは、この問題でチームに報告されたコンパイラのバグです。別のアセンブリのパラメータ内演算子を使用してください。修正はマスターにあるようですが、15.5.6でも問題がまだ存在することを確認できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加