Si tengo una matriz de bytes creados byte [] binBuffer = new byte [256] y llené 100 bytes de la matriz, si quiero pasar solo esos 100 bytes a algún otro método , ¿es posible hacer eso sin crear una nueva matriz de bytes de 100 bytes, copiar de la matriz anterior a la nueva, y luego pasar la nueva matriz? ¿De alguna manera puedo pasar los primeros 100 bytes? Mi aplicación se aplica específicamente para pasar la matriz a un procedimiento almacenado.usando parte de una matriz de bytes
Respuesta
Si puede utilizar LINQ:
SomeMethod(binBuffer.Take(100));
si está utilizando .NET 3.5 se puede utilizar el método de extensión Take() y hacer lo siguiente:
class Program
{
static void Main(string[] args)
{
byte[] b = new byte[1000];
dowork(b.Take(10).ToArray());
}
public static void dowork(byte[] b)
{
// do some work
}
}
Cuando se pasa un array a un método, solo se pasa una referencia a él, ya que las matrices son en realidad tipos de referencia. Básicamente tiene un puntero a la matriz, y luego el desplazamiento en los corchetes solo le dice cuántas "ranuras" están alejadas del inicio. Por lo tanto, la única forma real de hacerlo sería pasar dos parámetros a su método. Una es la matriz real, y la segunda es el número máximo hasta donde tiene que ir, en su caso sería 100. En ese método, solo iterará a través de la matriz hasta que se alcance el número máximo.
Un patrón muy común cuando se trabaja con tampones es el: Modelo
Foo(byte[] data, int offset, int count) {...}
. Sin embargo, no puede usar esto con un parámetro SqlCommand
/, ya que cuando asigna un parámetro, consume todo el búfer. Necesitará una nueva matriz:
byte[] second = new byte[100];
Buffer.BlockCopy(first, firstOffset, second, 0, 100);
param.Value = second;
La respuesta corta es: NO. Cualquier cosa que hagas (además de pasar la matriz misma como parámetro) creará una nueva matriz y copiará los primeros 100 bytes en ella.
Sin embargo, dado que no está pasando la matriz por valor, sino que está pasando una referencia a ella, ¿por qué le importa si la matriz es de 256 bytes o 100? No estás desperdiciando más memoria. Sin embargo, es posible que necesite decirle al método cuánto de esa matriz usar, ya que el método Length devolverá la longitud completa.
EDIT: Me acabo de dar cuenta de que desea pasar la matriz a un procedimiento almacenado. Esto copiará toda la matriz. Tendrá que hacer una copia con solo los elementos que desea aprobar.
- 1. Mostrar una matriz de bytes como una imagen usando JavaScript
- 2. Cómo convierto una parte de una tupla de python (matriz de bytes) en un número entero
- 3. deserializar una matriz de bytes
- 4. Enviando una matriz de bytes en json usando jackson
- 5. ¿Cómo convertir una matriz de bytes a una matriz int?
- 6. Obtener parte de una matriz
- 7. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 8. MemoryStream frente a una matriz de bytes
- 9. Eliminando los primeros 16 bytes de una matriz de bytes
- 10. Java: ¿Cómo "recortar" una matriz de bytes?
- 11. Inserte una matriz de bytes en otra matriz de bytes en una posición específica con C#
- 12. ¿Cómo convierto una matriz de bytes Java en una matriz de bytes Scala?
- 13. División de una matriz de bytes
- 14. Cómo convertir una matriz de bytes en una matriz int?
- 15. Copie una parte de la matriz de bytes NSData a otro tipo NSData
- 16. Int matriz de bytes a
- 17. Convertir una matriz de cadenas a matriz de bytes
- 18. Python 3 Creando una matriz de bytes
- 19. Cómo dividir una matriz de bytes
- 20. Obtenga parte de una matriz de caracteres
- 21. asignación de matriz de bytes
- 22. cadena de matriz de bytes
- 23. Obtener un objeto de imagen de una matriz de bytes
- 24. JavaScript forma parte de una matriz
- 25. matriz de bytes en groovy
- 26. anexar parte de la matriz de bytes de Java a StringBuilder
- 27. ¿Cómo reproducir un video de una matriz de bytes?
- 28. MemoryStream y la construcción de una matriz de bytes
- 29. ¿Diseccionar una matriz de bytes en distintos tipos de datos?
- 30. Conversión de una matriz de bytes en una matriz de flotantes
Soy demasiado perezoso para comprobarlo, pero ¿realmente eso NO solo copia la matriz a una nueva matriz de tamaño 100? –
De acuerdo con Andrew. Esto debe ser verificado dos veces. –
Los documentos indican que el método usa la ejecución diferida, la consulta representada no se ejecuta hasta que el objeto se enumera con GetEnumerator o foreach. Take (src) enumera los elementos de origen y de rendimiento hasta que se obtengan los elementos de conteo o src no contenga más elementos. Así que supongo que no se copia. – Jeremy