如何在具有模板/泛型类型数组的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

我想知道是否有任何方法可以使用C语言中的System.IO.BinaryWriter来编写模板/泛型类型的数组

例如,我在模板结构中有一个缓冲区:

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);
      }
    }