public interface Serializable<T>
void Read(BinaryReader reader);
public static class BinaryReaderExt
public static bool Read<T>(this BinaryReader reader, out T obj)
where T : unmanaged, Serializable<T>
public struct MyStruct : Serializable<MyStruct>
public float Foo { get; set; }
public int Bar { get; set; }
public void Read(BinaryReader reader)
Foo = reader.ReadSingle();
Bar = reader.ReadInt32();
public static class Program
public static void Main(string[] args)
byte[] data = new byte[8];
BinaryReader reader = new(new MemoryStream(data));
if (reader.Read(out MyStruct test))
Console.WriteLine($"Success: {test.Foo}");
Console.WriteLine("Failure!");