You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么MemoryStream.Write在客户端正常却在服务端编译失败?

解决.NET 4.7.2中MemoryStream.Write缺少必需参数的编译错误(CS7036)

问题核心是不同.NET版本的API差异:.NET 8(客户端)的MemoryStream.Write提供了仅传入byte[]的简化重载,但.NET Framework 4.7.2(服务端)的MemoryStream.Write没有这个重载,必须传入三个参数:byte[] buffer、int offset、int count。你的服务端代码里的ms.Write调用不符合.NET 4.7.2的API要求,因此触发CS7036错误。

修改方案

修改服务端PacketBuilder类的WriteString方法,补充offset(传0,从数组起始位置开始写)和count(传数组长度)参数:

public void WriteString(string msg)
{
    var msgLength = msg.Length;
    var lengthBytes = BitConverter.GetBytes(msgLength);
    ms.Write(lengthBytes, 0, lengthBytes.Length); // 补充offset和count参数
    var msgBytes = Encoding.ASCII.GetBytes(msg);
    ms.Write(msgBytes, 0, msgBytes.Length); // 补充offset和count参数
}

修改后的完整服务端代码

using System;
using System.IO;
using System.Text;

namespace ChatServer.Net.IO
{
    class PacketBuilder
    {
        MemoryStream ms;
        public PacketBuilder()
        {
            ms = new MemoryStream();
        }

        public void WriteOpCode(byte opcode)
        {
            ms.WriteByte(opcode);
        }

        public void WriteString(string msg)
        {
            var msgLength = msg.Length;
            var lengthBytes = BitConverter.GetBytes(msgLength);
            ms.Write(lengthBytes, 0, lengthBytes.Length);
            var msgBytes = Encoding.ASCII.GetBytes(msg);
            ms.Write(msgBytes, 0, msgBytes.Length);
        }

        public byte[] GetPacketBytes()
        {
            return ms.ToArray();
        }
    }
}

参数说明

  • offset设为0:表示从字节数组的起始位置读取数据写入流
  • count设为数组长度:表示将整个数组的内容全部写入流

修改后服务端即可正常编译,且逻辑与客户端保持一致。

内容的提问来源于stack exchange,提问作者obtein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:05:18