【问题标题】:run C# protobuf example with errors运行有错误的 C# protobuf 示例
【发布时间】:2018-11-08 04:18:44
【问题描述】:

C# 新手,我在 MacOS 上安装了 Rider,并在解决方案中安装了 Google.Protobuf 和 protobuf-net。我在link 上找到了 C# protobuf 的示例,并将文件添加到解决方案中。但是,当我编译 .cs 文件时,我得到了这些错误。

Addressbook.cs(263, 57): [CS1615] 参数 1 不能使用 'ref' 关键字传递
Addressbook.cs(445, 61): [CS1615] 参数 1 不能使用 'ref' 关键字传递
Addressbook.cs(580, 57): [CS1615] 参数 1 不能使用 'ref' 关键字传递

那么如何解决这些问题呢?

【问题讨论】:

    标签: c# rider protocol-buffers


    【解决方案1】:

    似乎方法参数不接受引用:ref argument;

    要解决此问题,请确保删除行中参数之前的 ref Addressbook.cs 文件的 263、445、580。

    给出的例子:

    if (!pb::UnknownFieldSet.MergeFieldFrom(ref _unknownFields, input)) {
              return;
    }
    

    应该是:

    if (!pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input)) {
              return;
    }
    

    【讨论】:

    • 但是这个Addressbook.cs是protoc命令创建的,我觉得不应该修改。
    【解决方案2】:

    通过对比官方的例子和protoc --csharp_out文件,发现区别出现在@nnty提到的子句中。在官方示例中,该子句被替换为

    _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
    

    所以用上面的句子改变所有错误的地方可能有助于解决问题。

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2015-05-10
      相关资源
      最近更新 更多