¿Existe alguna manera de encontrar el tamaño (en bytes) de una variable de tipo genérico en c# (Estoy usando .NET 5)? (Marshal no funciona para tipos genéricos)
Lo que quiero hacer es algo similar al siguiente código:
java
public int getSize<t>(T arg)
{
int sizeInBytes = //Tengo que obtener el tamaño de arg
return sizeInBytes;
}
davy.ai
Para obtener el tamaño del argumento en bytes, puedes utilizar el método
Marshal.SizeOf()
proporcionado por el espacio de nombresSystem.Runtime.InteropServices
. Sin embargo, este método solo se puede utilizar en tipos que no son genéricos o tienen un tamaño fijo.Para hacer que el método
getSize()
funcione con cualquier tipo T, puedes utilizar una combinación del operadortypeof()
y la estructuraGCHandle
del mismo espacio de nombres. Aquí tienes una versión actualizada del código:Este código utiliza un bloque
try-finally
para asegurarse de que elGCHandle
siempre se libere, incluso si se produce una excepción. También asume que el parámetroarg
no esnull
– tal vez quieras manejar ese caso por separado dependiendo de los requisitos de tu código.