【发布时间】:2013-02-25 12:15:04
【问题描述】:
我正在为 skype bot 做一个消息循环,这意味着我可以轻松地做广告/群发消息。但是,在循环中的第一个名称字符串被类中的名称替换后,它将仅使用该名称,而不会在下一个循环中替换新名称。
代码:
if(listView2.SelectedItems.Count<=0)
return;
string value="Hi %name%!";
string body="";
if(Program.InputBox("New Message", "Body of the message:", ref value)==DialogResult.OK) {
body=value;
}
foreach(ListViewItem i in listView2.SelectedItems) {
String rawID=i.SubItems[7].ToString();
String[] splitID=rawID.Split('}');
String[] ID=splitID[0].Split(new char[] { '{' });
body=body.Replace("%handle%", SkypeUser.Users[Convert.ToInt32(ID[1])].Handle);
body=body.Replace("%name%", SkypeUser.Users[Convert.ToInt32(ID[1])].Name);
body=body.Replace("%status%", SkypeUser.Users[Convert.ToInt32(ID[1])].Status);
body=body.Replace("%country%", SkypeUser.Users[Convert.ToInt32(ID[1])].Country);
body=body.Replace("%mood%", SkypeUser.Users[Convert.ToInt32(ID[1])].Mood);
body=body.Replace("%about%", SkypeUser.Users[Convert.ToInt32(ID[1])].About);
if(!(body==String.Empty)) {
skype.SendMessage(SkypeUser.Users[Convert.ToInt32(ID[1])].Handle, body);
}
}
如果我选择三个人,分别是 Jim、Tim 和 Derp,那么所选列表中的第一个人就是 Jim。如果我使用%name%,它将在给 Jim 的消息中正确地替换为“Jim”,但给 Tim 和 Derp 的消息也将包含“Jim”,而不是用字符串将 %name% 替换为他们的名字。
编辑:
我知道将value、body 和 if 语句放在循环中;但我希望只需要输入一次消息。这就是大众信息的全部意义所在。
【问题讨论】:
-
在这种情况下,您可以使用临时变量,该变量每次都会被分配给 body.. 还有另一种解决方案,但它需要更多的努力。您可以保持代码原样,并且可以使用 RegularExpression.replace() 并将替换的值放入另一个字符串中,而不是将其放入变量“body”中...