Sunt extrage o mulțime de informații într-o listă, legată la o bază de date și vreau să creez un șir de grupuri, pentru cineva care este conectat la site-ul web.
Eu folosesc acest lucru pentru a testa, dar acest lucru nu este dinamic, astfel încât acesta este într-adevăr rău:
string strgroupids = "6";
Vreau să folosesc acest lucru acum. Dar șirul returnat este ceva de genul 1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Vreau să șterge ,
după 5
dar's cu siguranta nu funcționează.
Siruri de caractere în c# sunt imuabile. Atunci când în codul faci strgroupids.TrimEnd(',');sau
strgroupids.TrimEnd(new char[] { ',' });anii
strgroupids` string nu este modificat.
Aveți nevoie pentru a face ceva de genul strgroupids = strgroupids.TrimEnd(',');
în schimb.
Pentru a cita din aici:
Siruri de caractere sunt imuabile--conținutul unui obiect șir nu poate fi s-a schimbat după ce obiectul este creat, deși sintaxa face apar ca dacă puteți face acest lucru. De exemplu, atunci când scrie acest cod, de fapt compilatorul creează un nou obiect string de a organiza noi secvență de caractere, și că noul obiect este atribuit b. La string "h" este apoi eligibile pentru colectarea gunoiului.
Adăugați o metodă de prelungire.
public static string RemoveLast(this string text, string character)
{
if(text.Length < 1) return text;
return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}
apoi, utilizați:
yourString.RemoveLast(",");
Elimină orice sfârșit virgule:
while (strgroupids.EndsWith(","))
strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);
Acest lucru este invers, deși, ai scris codul care se adaugă virgulă în primul rând. Ar trebui să utilizați șir de caractere.Alăturați-vă(",",g)
în loc, presupunând " g " este un string[]`. Da un nume mai bun decât " g " prea !
Ca o alternativă pentru a adăuga o virgulă pentru fiecare element ai putea doar cu ajutorul Corzilor.Alăturați-vă:
var strgroupids = String.Join(",", groupIds);
Aceasta va adăuga separator ("," în acest exemplu) între fiecare element din matrice.
string strgroupids = string.Empty;
groupIds.ForEach(g =>
{
strgroupids = strgroupids + g.ToString() + ",";
});
strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);
Rețineți că utilizarea de "ForEach" aici este în mod normal considerat "prost" (a se citi de exemplu http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx)
Folosind unele LINQ:
string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);
Fără sfârșit-substringing:
string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));
`string.Alătură-te este mai bine, dar dacă într-adevăr ** vrei un LINQ "ForEach":
var strgroupids = string.Empty;
groupIds.ForEach(g =>
{
if(strgroupids != string.Empty){
strgroupids += ",";
}
strgroupids += g;
});
Unele note:
,
deoarece's niciodată anexată+=
) este util pentru adăugarea la siruri de caractere.ToString()
este inutil cum este numit în mod automat atunci când concatenarea non-siruri de caractereStringBuilder
ar trebui să fie considerat în loc de siruri de caractere concatenarea