Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Arraylist搜索字符串,但没有输出_C#_Arraylist_Output_String Search - Fatal编程技术网

C# Arraylist搜索字符串,但没有输出

C# Arraylist搜索字符串,但没有输出,c#,arraylist,output,string-search,C#,Arraylist,Output,String Search,有人能告诉我,为什么我在按钮上没有得到任何输出单击 string searchString = TextBox1.Text; ArrayList personarraylist = new ArrayList(); foreach (Person a in personarraylist) { if (searchString == Convert.ToString(a)) { personarraylist.Add(a); } } ListBox1.D

有人能告诉我,为什么我在
按钮上没有得到任何输出单击

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\u data/Personfile.ser”);这就是我需要数据的地方。我使用一个Filecontroller类来写入和读取(以及更新)文件。但是搜索功能让我感觉更好。(作为一名学生,需要在文件中处理数据,否则我会使用数据库)。希望这能让我的代码更清晰一点。我是否必须将搜索词与诸如firstName之类的内容进行比较,或者它是否可以贯穿整个文件?

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

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

编辑:嗯,您正在查看一个空的
数组列表

ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
    ...
}
这永远不会进入
ArrayList
的主体。我猜你的意思是:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
    if (a.FirstName == searchString)
    {
        matches.Add(a);
    }
}
此外,即使您确实有一些值要查看,也完全可能
Convert.ToString(a)
不会返回搜索到的值。除非您的
Person
类重写
ToString()
,否则您将只获得类名。更可能的情况是,您实际上想要的是:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
    if (a.FirstName == searchString)
    {
        matches.Add(a);
    }
}
(或您实际要搜索的
Person
的任何属性。)

然后,您当前正在添加到正在搜索的同一
ArrayList
——这不是您想要的。您可能需要以下内容:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
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);

编辑:嗯,您正在一个空的
数组列表中查找:

ArrayList personarraylist = new ArrayList();
foreach (Person a in personarraylist)
{
    ...
}
这永远不会进入
ArrayList
的主体。我猜你的意思是:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
    if (a.FirstName == searchString)
    {
        matches.Add(a);
    }
}
此外,即使您确实有一些值要查看,也完全可能
Convert.ToString(a)
不会返回搜索到的值。除非您的
Person
类重写
ToString()
,否则您将只获得类名。更可能的情况是,您实际上想要的是:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
ArrayList people = GetAllPeopleFromSomewhere();
ArrayList matches = new ArrayList();
foreach (Person a in people)
{
    if (a.FirstName == searchString)
    {
        matches.Add(a);
    }
}
(或您实际要搜索的
Person
的任何属性。)

然后,您当前正在添加到正在搜索的同一
ArrayList
——这不是您想要的。您可能需要以下内容:

ArrayList people = GetAllPeopleFromSomewhere();
foreach (Person a in people)
{
    ...
}
if (a.FirstName == searchString)
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);

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

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

在开始foreach循环之前,您需要用值填充personarraylist。
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;
像这样的东西应该更有用:

    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;

在开始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;

使用常规数组(
string[]
)而不是
ArrayList
)可以以非常简单和高效的方式完成所需的操作。解决方案概述如下:

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

  • 应用
    Split()
    方法从
    \u tmp
    获取
    字符串[]
    数组:

    string[]\u arrPerson=\u tmp.Split(string[]分隔符)

  • 根据使用
    项指定的搜索条件,从该数组中填充
    ListBox1
    ListBox1
    的Add()
    方法:


    对于(int i=0;i所需的操作可以使用正则数组(
    string[]
    )而不是
    ArrayList
    )以非常简单和高效的方式完成。解决方案概述如下:

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

  • 应用
    Split()
    方法从
    \u tmp
    获取
    字符串[]
    数组:

    string[]\u arrPerson=\u tmp.Split(string[]分隔符)

  • 根据使用
    项指定的搜索条件,从该数组中填充
    ListBox1
    ListBox1
    的Add()
    方法:


    为了(int i=0;我发现了——我只是在编辑时注意到了这一点。不过我怀疑这并不是所需的全部。@JonSkeet这当然是可能的,但我们能知道的唯一一件事是给定的代码有错。我想说,添加到他正在搜索的同一
    ArrayList
    中几乎是已知的错误,不是吗?(如果存在任何匹配项,将导致异常…)“Jon ScSwitt这是一个你认为是错误的问题。也许错误是他打算在不同的集合上写代码>前缀<代码>,这是所有需要改变的。很好发现——只是在编辑的时候注意到我自己。我怀疑这不是所有所需要的。@ Jon Switt当然是可能的,但它是TH。我们能知道的唯一一件事是给定的代码有问题。我想说,添加到他正在搜索的同一
    ArrayList