如何在具有模板/泛型类型数组的C#中使用System.IO.BinaryWriter?
我想知道是否有任何方法可以使用C语言中的System.IO.BinaryWriter来编写模板/泛型类型的数组 例如,我在模板结构中有一个缓冲区:如何在具有模板/泛型类型数组的C#中使用System.IO.BinaryWriter?,c#,templates,generics,io,binarywriter,C#,Templates,Generics,Io,Binarywriter,我想知道是否有任何方法可以使用C语言中的System.IO.BinaryWriter来编写模板/泛型类型的数组 例如,我在模板结构中有一个缓冲区: T[] buffer T通常是bool或字节。我们的想法是为每种类型的文字都提供一些方法,比如: public void WriteByte(System.IO.BinaryWriter writer, int sizeToWrite) { if (typeof(T) != typeof(byte)) Error.Happened("Struc
T[] buffer
T通常是bool或字节。我们的想法是为每种类型的文字都提供一些方法,比如:
public void WriteByte(System.IO.BinaryWriter writer, int sizeToWrite)
{
if (typeof(T) != typeof(byte)) Error.Happened("Struct is not of type byte.");
// Direct use does not work even when T is 'byte'
writer.Write(buffer[i], 0, sizeToWrite);
// Casting does not work
writer.Write((byte[])buffer[i], 0, sizeToWrite);
}
但是,似乎没有办法使用模板化数组进行写入
欢迎提出任何建议 我不太清楚目的是什么,但还有一条路要走:
for(int i = 0; i < sizeToWrite; ++i)
{
writer.Write((byte)buffer[i]);
}
public static void WriteByte<T>(T[] data, Converter<T, byte[]> converter, string path)
{
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
foreach (var x in data)
{
var bytes = converter(x);
foreach (var b in bytes)
{
writer.Write(b);
}
}
}
}
}
public static void WriteBytes3<T>(T[] data, Action<T> writer)
{
foreach (T x in data)
{
writer(x);
}
}
static void Main(string[] args)
{
using (FileStream stream = new FileStream(@"C:\Temp\MyBinary6.myb", FileMode.Create, FileAccess.Write, FileShare.None))
using (BinaryWriter writer = new BinaryWriter(stream))
{
WriteBytes3(intData, writer.Write);
}
}
编辑:
另一种方法可以是:
public static void WriteByte<T>(T[] data, Converter<T, byte[]> converter, string path)
{
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
foreach (var x in data)
{
var bytes = converter(x);
foreach (var b in bytes)
{
writer.Write(b);
}
}
}
}
}
public static void WriteBytes3<T>(T[] data, Action<T> writer)
{
foreach (T x in data)
{
writer(x);
}
}
static void Main(string[] args)
{
using (FileStream stream = new FileStream(@"C:\Temp\MyBinary6.myb", FileMode.Create, FileAccess.Write, FileShare.None))
using (BinaryWriter writer = new BinaryWriter(stream))
{
WriteBytes3(intData, writer.Write);
}
}
publicstaticvoidwritebytes3(T[]数据,动作编写器)
{
foreach(数据中的T x)
{
作家(x);
}
}
静态void Main(字符串[]参数)
{
使用(FileStream stream=newfilestream(@“C:\Temp\MyBinary6.myb”、FileMode.Create、FileAccess.Write、FileShare.None))
使用(BinaryWriter=新的BinaryWriter(流))
{
WriteBytes3(intData,writer.Write);
}
}
public static void WriteBytes3<T>(T[] data, Action<T> writer)
{
foreach (T x in data)
{
writer(x);
}
}
static void Main(string[] args)
{
using (FileStream stream = new FileStream(@"C:\Temp\MyBinary6.myb", FileMode.Create, FileAccess.Write, FileShare.None))
using (BinaryWriter writer = new BinaryWriter(stream))
{
WriteBytes3(intData, writer.Write);
}
}