Why does it have to be a struct anyway?
It's not a good design to have a struct hold a memory block. coz valuetype instances will be copied around when passed as parameters.
Change struct to class will solve your problem.
On the other hand, if you are trying to declear it as struct for some interop reasons, you may wanna try:
[MarshalAs(UnmanagedType.ByValArray, SizeConst=40)]
byte[] Name;