Scinde une chaîne en un tableau, puis la boucle, en C#
J'ai Googlé ce BEAUCOUP, mais mon C# compétences sont assez terrible et je ne vois pas pourquoi cela ne fonctionne pas.
J'ai une chaîne qui vient d'un objet de session, je n'en ai pas le moindre contrôle sur le réglage. La chaîne contient quelques phrases séparées par six traits de soulignement. par exemple:
Sentence number one______Sentence number two______Sentence number three etc
Je veux partager cette chaîne par les six traits de soulignement et de retour de chaque élément de la matrice résultante.
Voici le code que j'ai:
string itemsPlanner = HttpContext.Current.Session["itemsPlanner"].ToString();
string[] arrItemsPlanner = itemsPlanner.Split(new string[] { "______" }, StringSplitOptions.None);
foreach (string i in arrItemsPlanner)
{
newItemsPlanner += "debug1: " + i; //This returns what looks like a number, as I'd expect, starting at zero and iterating by one each loop.
int itemNumber;
try
{
itemNumber = Convert.ToInt32(i);
string sentence = arrItemsPlanner[itemNumber].ToString();
}
catch (FormatException e)
{
return "Input string is not a sequence of digits.";
}
catch (OverflowException e)
{
return "The number cannot fit in an Int32.";
}
finally
{
return "Fail!"
}
}
Chaque fois que je l'exécute, la session est en train d'être récupérées avec succès, mais la ligne qui dit: itemNumber = Convert.ToInt32(i); échoue à chaque fois et j'obtiens un message d'erreur indiquant que "la chaîne d'Entrée n'est pas une séquence de chiffres."
Quelqu'un peut me pointer dans la bonne direction avec ce s'il vous plaît?
Merci beaucoup!
- Pouvez-vous donner un exemple de votre session de la chaîne? Essayez de garniture Convertir.ToInt32(j'.Trim()).
- Post valeur de l'échantillon pour
itemsPlanner
- est-il quelque chose comme1______6______1
? - Si la chaîne d'entrée a été
324534______1162______12432
au lieu de "phrases" votre question aurait plus de sens. Aussi, pourquoi êtes-vous convertir un entier puis retour à une chaîne de caractères? Qu'essayez-vous de faire? - Ce type est
newItemsPlanner
?
Vous devez vous connecter pour publier un commentaire.
dans votre cas
i
n'est pas un nombre, c'est l'élément dans le tableau. Une boucle foreach n'a pas de variable d'itération, vous avez seulement accès à l'élément actuel itérée pari
.Donc la première boucle itareation i est nombre de Phrase un, puis Phrase numéro deux.
Si vous voulez que le numéro, vous devez utiliser une boucle for à la place.
Donc quelque chose comme cela
Espère que cela aide.
Si vous voulez juste pour obtenir à chaque phrase et de faire quelque chose avec elle, cela fera l'affaire:
Vous pouvez diviser une chaîne ainsi que char (ou char[]). Dans le foreach " je " sera la valeur de la phrase, de sorte que vous pouvez concaténer ou de traiter ou de faire n'importe quoi 🙂
Si j'ai mal compris, toutes mes excuses. J'espère que cela aide 🙂
À partir de votre exemple
i
ne contient pas valide d'un nombre entier, doncConvert.ToInt32
échoue. Leforeach
boucle fixei
avec l'élément en cours dans les phrases de tableau, donc en grosi
contient toujours l'une des phrases dans votre chaîne principale. Si vous voulezi
à l'index dans le tableau, utilisez unfor
boucle.Exemple de MSDN.
Avez-vous besoin de couper votre chaîne avant de se convertir à un certain nombre? si ce n'est pas vous souhaiterez peut-être utiliser Int32.tryParse()
Dans votre exemple de code
foreach (string i in arrItemsPlanner)
'i' obtiendrez la chaîne de valeur de arrItemsPlanner un par un.Pour exemple sur la première itération, il aura "Phrase number one" qui n'est évidemment pas un vlid ont, par conséquent, votre échec de la conversion.
i
ne contient qu'un seul de le fragment de chaîne qui sera :number one
Sentence number two
etSentence number three
. Si vous voulez contenir un entier représentant ht index, utilisez :1) un
for
boucle2) un
int
défini avant votreforeach
et de l'augmenter (myInt++) dans leforeach
code !