2012-12-20 12 views
6

Ok, mam ten ciąg Player.Character z tym w nim "Average Man{[Attributes (Mind 10) (Body 10) (Soul 10)]}".C# Do-Loop nie dodaje znaków do łańcucha znaków

Mam taką pętlę do-up, która powinna przechodzić przez ten ciąg 1-znakowy na raz i sprawdzać, czy jest to "[", podczas dodawania każdego znaku, sprawdza inny ciąg ContainerName. Chodzi o to, że ContainerName ma tylko to w sobie "[" i chcę, żeby to miało mieć "Average Man{".

Jeśli ktoś mógłby mi pomóc zrozumieć, dlaczego tak się dzieje i być może rozwiązaniem, na które mój umysł umysłowy sobie poradzi, byłbym bardzo łaskawy.

O ya, oto mój kod.

int count = -1; 

string ContainerName = ""; 

//Finds Start of container 
do 
{ 
    count = count + 1; 
    ContainerName = ContainerName + Player.Character[count].ToString(); 
} while (Player.Character[count].ToString() != "[" && 
     Player.Character.Length - 1 > count); 

textBox1.Text = ContainerName; 
+7

Szczerze, najlepszą odpowiedzią na to pytanie jest do refaktoryzacji kodu - Player.Character powinien być klasą własną, a nie ciągiem, który musisz przeanalizować. –

+0

Czy prosty Split() nie byłby łatwiejszy? – Chrono

+0

Powinienem wspomnieć, że gracz jest klasą, a znak jest zapisany w nim. –

Odpowiedz

1

Twój kod działa poprawnie (I tylko przetestowane). Nazwa ContainerName będzie mieć wartość "Average Man {[". Gracz.Charecter prawdopodobnie nie ma właściwej wartości. Kiedyś Player.Charecter = "przeciętnego człowieka {[Atrybuty (min 10) (Ciało 10) (Dusza 10)]}"

Bardziej eleganckim rozwiązaniem byłoby

TextBox1.Text = Player.Character.Substring(0, Player.Character.IndexOf('[')) 
+0

Dzięki za odpowiedź na faktyczne pytanie. Odkryłem, że to działa również. –

+0

Rzeczywiście tak, lol. Po tym stwierdzeniu zauważyłem, że mam linię kodu, którą przeoczyłem, zmieniając ciąg znaków. Ups. Zajęło mi to tylko godzinę. –

+0

Twoje rozwiązanie wygląda lepiej, ale nie mogę powiedzieć, że wiem wystarczająco dużo, aby zrozumieć, co robi. –

1

Jestem zakładając postać jest właściwość ciąg Player, a chcesz ciąg do pierwszego [ lub cały ciąg, jeśli nie istnieje.

StringBuilder sb = new StringBuilder(); 
foreach (char c in Player.Character) 
{ 
    if (c == '[') 
     break; 
    sb.Append(c); 
} 
textBox1.Text = sb.ToString(); 

lub

var i = Player.Character.IndexOf('['); 
textBox1.Text = i >= 0 ? Player.Character.Substring(0, i) : Player.Character; 
+0

Drugi przykład nie działa. '.Substring (int)' zwraca wszystko po indeksie, więc '" Average Man {[Attributes ".Substring (12) ==" [Atrybuty "', gdzie chcą '" Average Man {"'. –

+0

Ups, w rzeczy samej. Zmieniono go na 'Substring (0, i)' – snurre

Powiązane problemy