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'
所以我该怎么办呢,谢谢
首先,
您可能应该使用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,value2和value3,这里只是示例,向您展示可用的各种重载;您应该查看BinaryWriter上的MSDN页面以获取更多信息)
更重要的是,
您正在使用C++代码中的指针算法; C#仅在unsafe块内运行时提供真正的指针功能,如果可能的话(在此处),应该避免使用它..NET适用于引用,而不是指针,因此您无法控制实际的内存分配.
长话短说,你不能按照你试图做的方式做你想做的事.