1

谁能告诉我,为什么我没有得到任何输出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 类在文件中写入和读取(也更新)。但是搜索功能刚刚让我变得更好。(作为学生,需要在文件中处理数据,否则我会使用数据库)。希望这可以清除我的代码。我是否必须将搜索词与名字进行比较,或者它可以在整个文件中使用吗?

4

6 回答 6

3

您创建一个新的数组列表,然后立即foreach覆盖它。由于您刚刚创建了它,因此其中没有任何项目,因此foreach它什么也不做。

于 2013-05-07T16:53:32.523 回答
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);
于 2013-05-07T16:53:27.820 回答
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;
于 2013-05-07T16:59:13.200 回答
0

您正在将 Person 对象转换为字符串。您可能希望在 Person 对象中查看要比较的数据的元素。

于 2013-05-07T16:53:20.100 回答
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;
于 2013-05-07T16:53:55.213 回答
0

所需的操作可以使用常规数组 ( string[]) 而不是ArrayList. 解决方案概述如下:

  1. 将整个文件作为单个字符串读取并将其分配给string _tmpvar(使用您熟悉的任何对象/方法,例如System.IO.StreamReader

  2. 应用Split()方法来获取string[]数组_tmp

    string[] _arrPerson= _tmp.Split(string[] separator);

  3. 根据您使用以下方法指定的搜索条件ListBox1从该数组 _ 中填充:arrPersonItems.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链接

于 2013-05-07T20:32:51.657 回答