L'affectation de valeurs à un public tableau d'octets en une seule ligne C#
Je travaille avec un public tableau d'octets et souhaitez attribuer des valeurs, comme je l'ai attribuer les tableaux à l'intérieur d'une méthode, j'.e
byte[] foo = {0x32, 0x00, 0x1E, 0x00};
mais quand j'définir les valeurs que je suis obligé de faire
foo[0] = 0x32;
foo[1] = 0x00;
foo[2] = 0x1E;
foo[3] = 0x00;
Si j'utilise le premier exemple VS donne une erreur "Seule la cession, l'appel, incrémentation, décrémentation, attendent, et de nouvelles expressions d'objet peut être utilisé comme une déclaration"
Si elle permet à toute la matrice est toujours 4 octets.
mon code
public byte[] SetSpeed = new byte[4];
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (trackBar1.Value == 0)
{
try
{
stop = true;
UpdateSThread.Abort();
Thread.Sleep(350);
}
catch { }
SetSpeed = {0x00,0x00,0x00,0x00};
WriteMem(GetPlayer() + STATUS_OFFSET, SetSpeed);
label1.Text = "Normal";
}
}
Merci de poster un court mais exemple avec l'échec. Je m'attends à ce que vous avez donné pour être très bien - mais pas si vous êtes juste de l'affectation à
votre premier exemple compile (VS2012)
Vous n'avez toujours pas montré le code qui ne compile pas. J' suspect vous essayiez
l'exemple que j'ai mis jusqu'à maintenant, est ce que l'habitude de compiler.
Enfin. C'est ce que doit ont été à la question de départ.
foo
sans la déclarer.votre premier exemple compile (VS2012)
Vous n'avez toujours pas montré le code qui ne compile pas. J' suspect vous essayiez
SetSpeed = { 0x00, 0x00, 0x00, 0x00 }
n'est pas le même que l'original de votre exemple. En outre, vous n'êtes pas clair si vous voulez vraiment créer un nouveau tableau ou si vous voulez juste la mutation de l'ensemble existant.l'exemple que j'ai mis jusqu'à maintenant, est ce que l'habitude de compiler.
Enfin. C'est ce que doit ont été à la question de départ.
OriginalL'auteur user2340475 | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
Votre premier exemple est bien, mais il ne peut être utilisé dans une déclaration. Les éléments doivent être implicitement converti vers le type de l'élément. La taille est déterminée à partir du nombre d'éléments donnés.
Vous pouvez également d ce
comme indiqué ci-dessus que la syntaxe que vous essayez d'utilisation ne peut être utilisé dans une déclaration. donc, essayez comme ceci.
Merci, cela fonctionne, je suppose que je suis venu à travers les vagues, le public de la balise est pertinente, mais supprimé. pas de soucis, j'ai eu ma réponse
OriginalL'auteur Ehsan
Vous ne pouvez utiliser le formulaire où vous ne spécifiez pas de
new
lorsque vous êtes déclarant une variable. Donc c'est très bien:Mais ce n'est pas:
Au lieu de cela vous avez besoin de quelque chose comme:
Ou pour les cas où l'inférence de type fonctionne en votre faveur et vous êtes à l'aide de C# 3 ou plus, vous pouvez utiliser un implicitement tableau typé:
Cependant, vous avez vraiment besoin de décider si vous voulez pour créer un nouveau tableau, ou si vous souhaitez muter le tableau existant. Étant donné que vous êtes juste le réglage de toutes les valeurs à 0, vous pouvez à la place utiliser:
EDIT: Maintenant que la question contient ceci:
puis à l'aide de
est pas approprié, qui permet de changer la valeur de
SetSpeed
de se référer à un différents tableau.Mise à jour d'un tableau existant, vous pouvez soit rester dans les 4 états distincts, ou peut-être l'extraire à une méthode séparée avec 4 paramètres. Ce n'est pas vraiment clair ce que les valeurs vont être, ce qui rend difficile pour vous donner le meilleur code possible.
Mais vous avez encore besoin de décider si vous voulez un nouveau tableau ou pas. Ne fait rien d'autre ont une référence à la table déjà?
C'est soit
Array.Clear(SetSpeed, 0, 4);
ou((IList<byte>)SetSpeed).Clear();
.Merci, fixe.
Non, il ne fonctionne pas, lorsque la piste de la barre se déplace hors de 0, Un thread est démarré pour la boucle de mise à jour de la valeur dans la mémoire, la valeur SetSpeed, quand ramené à 0 le fil est sorti et la valeur en mémoire est de 4 octets de 0
OriginalL'auteur Jon Skeet
L'exemple donné
ne pas affecter des valeurs à un existant
byte[]
: plutôt, il remplace la référence d'une référence à un nouveaubyte[]
. Sans plus de contexte, cette approche peut (ou peut ne pas fonctionner), par exemple, le publicbyte[]
peut être en lecture seule, c'est à dire:Ce que vous pouvez faire est d'utiliser la statique des surcharges de
Array.Copy()
:Ou vous pourriez écrire une méthode d'extension (qui peut renvoyer à la ligne
Array.Copy
si vous le désirez):qui vous permettra de faire des choses comme:
OriginalL'auteur Nicholas Carey