Estoy escribiendo un DataStructure<T>
genérico que persiste en el disco, y debo escribirlo de forma que se garantice que el número T
se puede serializar en un número fijo de bytes. Por ejemplo, int
y char
deben aceptarse, pero string
o int[]
no deben ser. Del mismo modo, un struct
con un miembro string
no es aceptable, pero un unsafe struct
con una matriz fixed char
es.¿Cómo puedo asegurar que T sea serializable en un número fijo de bytes?
Podría escribir una prueba de tiempo de ejecución en el inicializador usando reflection y sizeof
para probar cada miembro, pero eso parece un terrible truco. ¿Hay alguna manera eficiente y (relativamente) segura de hacer esto?
Todas las T están garantizadas para ser de tamaño fijo (ya que cada instancia de una clase tiene el mismo tamaño), su interpretación de la cadena (para el caso cualquier tipo de referencia) es el problema, es posible que tenga que agregar una funda especial para manejar todos los tipos de referencia al reflejar T. http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx –
@Sanjeevakumar - Técnicamente tienes razón, mi título estaba redactado de forma ligeramente incorrecta. Lo he actualizado para reflejar mejor mi pregunta real. – dlras2
Por supuesto, para sufentaty large 'n', todos los datos son serializables en' n' bytes: p kore en serio, ¿está seguro de que quiere registros de tamaño fijo? Es enormemente limitante ... –