Si j'ai un tableau d'octets créé byte [] binBuffer = new byte [256] et je remplis 100 octets du tableau, si je veux passer seulement ces 100 octets à une autre méthode , est-ce possible de le faire sans créer un nouveau tableau d'octets de 100 octets, en copiant de l'ancien tableau vers le nouveau, puis en passant le nouveau tableau? Est-ce que je peux en quelque sorte juste passer les 100 premiers octets. Mon application s'applique spécifiquement à passer le tableau à une procédure stockée.en utilisant une partie d'un tableau d'octets
Répondre
Si vous pouvez utiliser LINQ:
SomeMethod(binBuffer.Take(100));
si vous utilisez .net 3.5, vous pouvez utiliser la méthode d'extension Take() et procédez comme suit:
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
}
}
Si vous downvote, veuillez préciser pourquoi ... Nous pouvons donc comprendre pourquoi la réponse donnée n'est pas valide. – Jeremy
Je n'ai pas effectué le downvoting, mais je suppose que cela a été fait parce que la question dit "sans créer un nouveau tableau d'octets", ce que 'Take()' fait certainement. – Alex
Lorsqu'un tableau est passé à une méthode, seule une référence à celle-ci est réellement passée, puisque les tableaux sont en réalité des types de référence. Vous avez essentiellement un pointeur sur le tableau, puis le décalage entre les crochets vous indique combien de "slots" sont éloignés du début. Par conséquent, la seule façon réelle de le faire serait de passer deux paramètres à votre méthode. L'un étant le tableau actuel, et le second étant le nombre maximum jusqu'à l'endroit où vous devez aller, dans votre cas ce serait 100. Dans cette méthode, vous ne faites qu'opérer dans le tableau jusqu'à ce que le nombre maximum soit atteint.
Un motif très fréquent lorsque l'on travaille avec des tampons est le:
Foo(byte[] data, int offset, int count) {...}
motif
. Cependant, vous ne pouvez pas utiliser ceci avec un paramètre SqlCommand
car, lorsque vous affectez un paramètre, il consomme tout le tampon. Vous aurez besoin d'un nouveau tableau:
byte[] second = new byte[100];
Buffer.BlockCopy(first, firstOffset, second, 0, 100);
param.Value = second;
La réponse courte est: NON. Tout ce que vous faites (en plus de passer le tableau lui-même comme paramètre) créera un nouveau tableau et copiera les 100 premiers octets de celui-ci.
Toutefois, comme vous ne transmettez pas le tableau par valeur, mais que vous lui transmettez une référence, pourquoi est-ce important pour vous si le tableau a une taille de 256 octets ou 100? Tu ne gaspilles pas plus de mémoire. Vous devrez peut-être indiquer à la méthode la quantité de ce tableau à utiliser, car la méthode Length retournera toute la longueur.
EDIT: Je viens de me rendre compte que vous voulez passer le tableau à une procédure stockée. Cela va copier le tableau entier. Vous devrez faire une copie avec seulement les éléments que vous voulez passer.
- 1. Affichage Table créée par un tableau en utilisant une partie
- 2. Comment afficher une partie d'une image en utilisant jquery?
- 3. capturer une partie d'une chaîne avec regex en utilisant PHP?
- 4. Obtenir seulement une partie de la ligne en utilisant awk
- 5. typedef'ing un tableau vs en utilisant une struct en C++
- 6. Comment convertir une partie d'un tuple python (tableau d'octets) en entier
- 7. Comment vérifier si une certaine partie du tableau existe dans un autre tableau?
- 8. si une variable est un tableau en utilisant JavaScript
- 9. comment obtenir span partie sélectionnée en utilisant Javascript
- 10. Changer la couleur d'une partie du texte en utilisant javascript?
- 11. Découper une chaîne en utilisant un tableau de caractères en utilisant C#
- 12. Éliminer une partie d'un fichier en python
- 13. tri élément de tableau en utilisant javascript
- 14. php tableau d'impression en utilisant foreach imbriqué
- 15. tableau en utilisant dans le JQuery
- 16. Comment faire une recherche d'une partie d'un mot en utilisant lucene?
- 17. Comment sélectionner une partie spécifique d'un tableau lorsque deux tableaux sont retournés?
- 18. Comment transférer un tableau Java en tableau javaScript en utilisant jsp?
- 19. Comment initialiser un tableau de tableaux (ou un tableau en dents de scie) en utilisant CodeDom?
- 20. Insérer une partie d'une table dans une autre table
- 21. Tableau déroulant utilisant jQuery
- 22. masquer une partie du formulaire
- 23. ViewData.Model en partie est nulle
- 24. Réserver une partie du bureau
- 25. Comment formater une partie de DateTime en un chiffre?
- 26. Comment être en mesure de sélectionner une partie de l'écran?
- 27. Quadtree vs Red-Black tree pour une partie en C++?
- 28. Comment utiliser regex pour une partie de chaîne en C#
- 29. Comment modifier une partie spécifique d'un scalaire binaire en Perl?
- 30. Comment extraire une partie de cette image en Java?
Je suis trop fainéant pour vérifier - mais est-ce que cela ne fait PAS que copier le tableau dans un nouveau tableau de taille 100? –
D'accord avec Andrew. Cela devrait être revérifié. –
Les docs indiquent que la méthode utilise l'exécution différée, la requête représentée n'est pas exécutée tant que l'objet n'est pas énuméré avec GetEnumerator ou foreach. Take (src) énumère la source et fournit des éléments jusqu'à ce que les éléments count soient fournis ou que src ne contienne plus d'éléments. Donc je devine qu'il ne copie pas. – Jeremy