无法将'byte'类型转换为'T'

Aba*_*oub 2 c# generics casting

我是C#的新手,所以我真的不知道如何制作它,但在C++中,我就是这样做的

template <typename T> writeInt(int location, T value){
    *(T*)&buffer[location] = value;
}
Run Code Online (Sandbox Code Playgroud)

在C#我试图做同样的事情

public void WriteInt<T>(int location,T value)
        {
            (T)buffer[location] = value;
        }
Run Code Online (Sandbox Code Playgroud)

但是我发现了这个错误,Cannot convert type 'byte' to 'T' 所以我该怎么办呢,谢谢

Ada*_*son 5

首先,

您可能应该使用a MemoryStream和a BinaryWriter将原始类型写入缓冲区.您可以按照建议使用BitConverter该类,但最终会有很多中间byte[]对象以这种方式运行.

byte[] buffer;

int value1 = 10;
double value2 = 20;
string value3 = "foo";

using(var ms = new System.IO.MemoryStream())
{
    using(var writer = new System.IO.BinaryWriter(ms))
    {
        writer.Write(value1);
        writer.Write(value2);
        writer.Write(value3);
    }
}

buffer = ms.ToArray();
Run Code Online (Sandbox Code Playgroud)

(value1,value2value3,这里只是示例,向您展示可用的各种重载;您应该查看BinaryWriter的MSDN页面以获取更多信息)

更重要的是,

您正在使用C++代码中的指针算法; C#仅在unsafe块内运行时提供真正的指针功能,如果可能的话(在此处),应该避免使用它..NET适用于引用,而不是指针,因此您无法控制实际的内存分配.

长话短说,你不能按照你试图做的方式做你想做的事.