2011-03-17 4 views
0

dans ma variable:obtenir des valeurs de chaîne

string selectedObjects; 

j'ai une longue valeur comme:

"123;132;213;231;" 

je veux obtenir 4 fois les valeurs que: "123;" , "132;" , "213;" and "231;".

i tryed avec foreach comme:

public ActionResult ShowHistory(string selectedObjects) 
    { 
     foreach (string item in selectedObjects) 
     { 
      item = selectedObjects.Split(';'); 
     } 

mais ça ne marche pas. Comment puis je faire ça?

Répondre

1

Le flux est incorrect. Split renvoie un tableau à travers lequel vous devriez plutôt que itérer, en utilisant foreach si c'est votre choix. Alors:

foreach (string item in selectedObjects.Split(';')) 
{ 
    // do whatever you want with the items 
} 
0
public ActionResult ShowHistory(string selectedObjects) 
{ 
    foreach (string tempItem in selectedObjects.Split(new []{';'}, StringSplitOptions.RemoveEmptyEntries)) 
    { 
     string item = tempItem + ";"; // Add back on the ; character 
    } 
    // .. do something 

Le RemoveEmptyEntries est nécessaire, sinon, vous aurez une chaîne vide à la fin (parce que votre chaîne d'entrée se termine par « ; »). En outre, string.Split ne conserve pas le caractère séparateur, vous devez donc le rajouter si vous le souhaitez (d'où le tempItem).

0

Vous devez ajouter à nouveau le point-virgule après la division.

public ActionResult ShowHistory(string selectedObjects) 
{ 
    var items = selectedObjects.Split(';') 
           .Where(i => !string.IsNullOrEmpty(i)) 
           .Select(i => i + ";"); 
    ... 
} 

Ou (si vous pouvez garantir que le format exact)

public ActionResult ShowHistory(string selectedObjects) 
{ 
    var items = selectedObjects.TrimEnd(';') 
           .Split(';') 
           .Select(i => i + ";"); 
    ... 
} 
0

de Split retourne un tableau de string.

string selectedObjects = ...; 

foreach (string item in selectedObjects.Split(';')) 
{ 
    // do work 
} 
0
foreach(string item in selectedObjects.Split(new [] {';'}, 
              StringSplitOptions.RemoveEmptyEntries) 
             .Select(x=> x+";")) 
{ 
    //process item 
} 
0

méthode de Split retourne un tableau de chaîne, essayez somehting comme ce

string selectedObjects = "123;132;213;231;"; 
string[] s = selectedObjects.Split(';'); 

foreach (string item in s) 
{ 
    Console.Writeline(item.ToString()); 
} 
1

Vous pouvez utiliser une expression régulière:

foreach (Match m in Regex.Matches("123;132;213;231;", @"\d+;")) 
    string value = m.Value; //Do something worthwhile with the value. 

Toutes les autres réponses sont fausses ou overkill - à moins que je ne manque quelque chose.

+0

Vous avez besoin d'une double barre oblique inverse \\ sur ce d + et je ne pense pas qu'il ne veuille pas les points-virgules. –

+0

A droite, j'ai mis à jour ma réponse. Et selon la question, la sortie attendue est "123"; "132" "213" et "231;" - y compris le point-virgule. Merci. –

+0

Lol, oui le @ fera aussi le boulot :) –

Questions connexes