任何人都可以告诉我,为什么我不能在buttonclick
上获得任何输出?
string searchString = TextBox1.Text;
ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
if (searchString == Convert.ToString(a))
{
personarraylist.Add(a);
}
}
ListBox1.DataSource = personarraylist;
编辑:
大家好,谢谢你的意见。我有一个Person类,所有在页面上创建的数据都存储在一个文件中:FileController.ReadFile(Server.MapPath("〜/ App_Data / Personfile.ser"));这是我需要我的数据的地方。我使用Filecontroller类来编写和读取(也更新)文件。但搜索功能刚刚成为我的一部分。 (作为学生,文件中的数据处理是必需的,或者我会使用数据库)。希望这能清除我的代码。我是否必须将搜索词与eg firstName进行比较,还是可以在整个文件中进行比较?
答案 0 :(得分:3)
您创建一个新的数组列表,然后立即foreach
。由于您刚刚创建它,因此其中没有任何项目,因此foreach
不执行任何操作。
答案 1 :(得分:1)
ArrayList
:
ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
...
}
那永远不会进入ArrayList
的身体。我怀疑你的意思是:
ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
...
}
此外,即使您 要查看某些值,Convert.ToString(a)
也不会返回搜索到的值。除非您的Person
课程覆盖ToString()
,否则您只需获取课程名称。你更有可能想要这样的东西:
if (a.FirstName == searchString)
(或者您实际想要搜索的Person
的任何属性。)
然后,您当前正在添加您正在搜索的ArrayList
- 这不是您想要的。您可能需要以下内容:
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
if (a.FirstName == searchString)
{
matches.Add(a);
}
}
我还建议使用泛型集合,理想情况是LINQ。例如,使用LINQ,您的整个代码可以转换为以下内容:
ListBox1.DataSource = GetAllPeople().Where(p => p.FirstName == searchString);
答案 2 :(得分:0)
您正在将Person对象转换为字符串。您可能希望在Person对象中查看要与之比较的数据的元素。
答案 3 :(得分:0)
string searchString = TextBox1.Text;
ArrayList personarraylist = new ArrayList();
foreach (Person a in originalpersonarraylist)
{
//Assuming that there is a Name property in Person Class.
if (a.Name.StartsWith(searchString))
personarraylist.Add(a);
}
ListBox1.DataSource = personarraylist;
答案 4 :(得分:0)
在开始foreach循环之前,您需要使用值填充personarraylist。 这样的事情应该更有用:
string searchString = Textbox1.Text;
//Retrive the person data for some location
ArrayList personarraylist = getPersonData();
foreach (Person a in personarraylist)
{
if (searchString.contains(a.ToString()))
{
personarraylist.Add(a);
}
}
ListBox1.DataSource = personarraylist;
答案 5 :(得分:0)
使用常规数组(string[]
)代替ArrayList
,可以以相当简单有效的方式完成所需操作。解决方案概述如下:
将整个文件作为单个字符串读取并将其分配给string _tmp
var(使用您熟悉的任何对象/方法,例如System.IO.StreamReader
)
应用Split()
方法从string[]
获取_tmp
数组:
string[] _arrPerson= _tmp.Split(string[] separator)
;
根据您使用ListBox1
arrPerson
方法指定的搜索条件,从该数组_ Items.Add()
填充ListBox1
:
for(int i = 0; i< _arrPerson.Length; i ++) { if(_arrPerson [i] .Contains(searchString)){ListBox1.Items.Add(_arrPerson [i]);} }
此代码段的运行速度应远远超过使用ArrayList
的所有变体。
希望这会有所帮助。 我最好的,AB
PS:有关String.Split()方法
的详细信息,请参阅MSDN link