C#不要循环向字符串中添加字符

C#不要循环向字符串中添加字符,c#,C#,好的,我有这个字符串Player.Character里面有这个“普通人{[属性(心灵10)(身体10)(灵魂10)]” 我设置了这个do循环,这样它应该一次遍历这个字符串1个字符,看看它是否是this“[”,同时将它检查的每个字符添加到另一个字符串ContainerName。问题是ContainerName中只有这个“[”,我希望它应该有“普通人” 如果有人能帮助我理解为什么会发生这样的事情,并且可能是一个解决方案,我会非常感激 哦,是的,这是我的密码 int count = -1; stri

好的,我有这个字符串
Player.Character
里面有这个
“普通人{[属性(心灵10)(身体10)(灵魂10)]”

我设置了这个do循环,这样它应该一次遍历这个字符串1个字符,看看它是否是this
“[”
,同时将它检查的每个字符添加到另一个字符串
ContainerName
。问题是ContainerName中只有这个
“[”
,我希望它应该有
“普通人”

如果有人能帮助我理解为什么会发生这样的事情,并且可能是一个解决方案,我会非常感激

哦,是的,这是我的密码

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;

我假设Character是Player的string属性,您希望字符串一直到第一个
[
,或者如果它不存在,则希望整个字符串

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

您的代码运行良好(我刚刚测试过)。ContainerName将具有值“Average Man{[”。Player.Charecter可能没有正确的值。我使用了Player.Charecter=“Average Man{[属性(心灵10)(身体10)(灵魂10)]”

一个更优雅的解决方案是

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

老实说,这个问题的最佳答案是重构你的代码播放器。字符应该是它自己的类,而不是你必须解析的字符串。简单的Split()不是更容易吗?我应该提到播放器是类,字符是存储在其中的字符串。“我有一个字符串“普通人{[属性(心智10)(身体10)(灵魂10)]。”-这种格式是自定义的吗?你不能研究一下在.NET Framework中有内置解析器的标准格式,比如XML或JSON吗?没有什么可以阻止你将一个类作为一个成员存储在另一个中。字符应该是一个类。故事结束了。至少,坚持使用JSON。第二个示例不起作用。
.Substring(int)
返回索引后的所有内容,因此
将“平均人{[Attributes]”子字符串(12)=“[Attributes”
,在它们想要的地方
“平均人{”
。哦,的确如此。将其更改为
子字符串(0,i)
谢谢你回答这个实际问题。我发现它也很有效。确实有效,哈哈。在你说了这句话之后,我注意到我忽略了一行代码正在更改字符串。哎呀。我只花了一个小时就注意到了。你的解决方案看起来不错,但我不能说我知道的足够多,无法理解它的作用。它有三个功能:-查找字符串中“[”的位置(从0开始,因此在本例中为13)-在该字符串的两个位置之间构建一个包含每个字符的字符串(在本例中,从字符串的起始位置0到“[”的位置13),这将为我们提供“平均人{[”)-使Texbox1中的文本成为生成的字符串的值。如果字符串中不存在
'['
,这将导致
ArgumentOutOfRangeException
。。
TextBox1.Text = Player.Character.Substring(0, Player.Character.IndexOf('['))