C# 从具有特定元素值的arraylist检索对象

C# 从具有特定元素值的arraylist检索对象,c#,asp.net,.net,class,oop,C#,Asp.net,.net,Class,Oop,我有一个带有一些属性的类。例如,将姓名、年龄、性别等作为属性的类person 人们填写一张表格,其中包括他们的性别,这是一个dropdownlist,他们提交表格,然后将此人添加到arraylist中 我需要的是一个功能,点击一个按钮,显示所有选择女性作为性别的人 谁能帮帮我吗?几天来我一直在努力寻找正确的答案,现在有点绝望了 非常感谢 奥拉夫 这是我的.cs代码 public class Person { private string name; private str

我有一个带有一些属性的类。例如,将姓名、年龄、性别等作为属性的类person

人们填写一张表格,其中包括他们的性别,这是一个dropdownlist,他们提交表格,然后将此人添加到arraylist中

我需要的是一个功能,点击一个按钮,显示所有选择女性作为性别的人

谁能帮帮我吗?几天来我一直在努力寻找正确的答案,现在有点绝望了

非常感谢

奥拉夫

这是我的.cs代码

    public class Person
{
    private string name;
    private string artistname;
    private string address;
    private double number;
    private double zip;
    private string day;
    private string gender;

public Person(string name, string artistname, string address, double number, double zip, string day, string gender)
    {
        this.name = name;
        this.artistname = artistname;
        this.address = address;
        this.number = number;
        this.zip = zip;
        this.day = day;
        this.gender = gender;
    }

    public override string ToString()
    {
        string newPerson = name + " aka " + artistname + " lives on " + address + " " + number + " " + zip + " " + day + "Gender: " + gender;
        return newPerson;
    }
}
这是我的.aspx代码:

public partial class Index : System.Web.UI.Page
{
    static ArrayList personArrayList;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            personArrayList = new ArrayList();
        }
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Person p = new Person(txtName.Text, txtArtistName.Text, txtAddress.Text, Convert.ToDouble(txtNumber.Text), Convert.ToDouble(txtPostal.Text), Convert.ToString(dropdownDay.Text), Convert.ToString(dropdownGender.Text));
        personArrayList.Add(p);
    }

    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        ListBoxShow.Items.Clear();
        for (int i = 0; i < personArrayList.Count; i++)
        {
            ListBoxShow.Items.Add(personArrayList[i].ToString());
        }
    }

    protected void btnShowGentle_Click(object sender, EventArgs e)
    {
        ListBoxShow.Items.Clear();

    }

    protected void btnShowLadies_Click(object sender, EventArgs e)
    {
        ListBoxShow.Items.Clear();
        for (int i = 0; i < personArrayList.Count; i++)
        {
            if (personArrayList[i].gender = "Female")
            {

            }
        }
    }
}
公共部分类索引:System.Web.UI.Page
{
静态ArrayList personArrayList;
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
personArrayList=新的ArrayList();
}
}
受保护的void btnsupmit\u单击(对象发送者,事件参数e)
{
Person p=新的Person(txtName.Text,txtArtistName.Text,txtdaddress.Text,Convert.ToDouble(txtNumber.Text),Convert.ToDouble(txtPostal.Text),Convert.ToString(dropdownDay.Text),Convert.ToString(dropdownsex.Text));
添加(p);
}
受保护的void btnShowAll\u单击(对象发送者,事件参数e)
{
ListBoxShow.Items.Clear();
for(int i=0;i
你感谢这样的事情吗

protected void btnShowGentle_Click(object sender, EventArgs e)
{
    ListBoxShow.Items.Clear();
    for (int i = 0; i < personArrayList.Count; i++)
    {
        if(personArrayList[i].gender == "Male")
            ListBoxShow.Items.Add(personArrayList[i].ToString());
    }
}

////Possible alternate
//ListBoxShow.Items.Clear();
//ListBoxShow.Items.AddRange(personArrayList.Where( x => x.gender == "Male"));
protectedvoid bTNSHOW\u单击(对象发送者,事件参数e)
{
ListBoxShow.Items.Clear();
for(int i=0;ix.gender==“男性”);

你感谢这样的事情吗

protected void btnShowGentle_Click(object sender, EventArgs e)
{
    ListBoxShow.Items.Clear();
    for (int i = 0; i < personArrayList.Count; i++)
    {
        if(personArrayList[i].gender == "Male")
            ListBoxShow.Items.Add(personArrayList[i].ToString());
    }
}

////Possible alternate
//ListBoxShow.Items.Clear();
//ListBoxShow.Items.AddRange(personArrayList.Where( x => x.gender == "Male"));
protectedvoid bTNSHOW\u单击(对象发送者,事件参数e)
{
ListBoxShow.Items.Clear();
for(int i=0;ix.gender==“男性”);
C#方法是使用LINQ查询集合,例如:

var persons = personArrayList.AsQueryable();
var females = persons.Where(p => p.gender.Equals("Female"));
C#方法是使用LINQ查询集合,例如:

var persons = personArrayList.AsQueryable();
var females = persons.Where(p => p.gender.Equals("Female"));

我认为像这样的事情应该会奏效

using System.Linq;
var females = from Person P in personArrayList where P.Gender == "Female" select P;
[编辑]
我自己也有一些问题,所以问了一个对你有用的问题。

我想这样的问题应该可以解决

using System.Linq;
var females = from Person P in personArrayList where P.Gender == "Female" select P;
[编辑]
我自己也有一些问题,所以问了一个对你有用的问题。

为什么不使用类似SQLite的东西,这样你就可以使用内置数据库功能来为你做这件事?请检查答案或向我们添加更多帮助为什么不使用类似SQLite的东西,这样你就可以使用内置数据库功能来为你做这件事?请检查回答或向usI添加更多帮助我知道这不起作用,因为这是ArrayList而不是列表,但我想知道您是否可以像我使用的那样将完整查询转换为这种格式?“来自personArrayList中的Person P,其中P.Gender==“Female”选择P;”在您的情况下,我的编译器无法找出P是什么类型。所以它永远无法到达p.gender。。。可能是因为我在这里使用.NET3.5吗?您需要键入arraylist:PersonalArrayList=new arraylist();是的,但从源代码来看,它是一个普通的数组列表。。。这就是为什么我问如何在您的系统中指定p的类型。。。。我知道这对IL来说是一样的,但我不完全理解你的系统。当然,您可以选择在方法中强制转换集合,但我看不出有任何理由不在初始化时键入它。我在Mac atm机上,所以无法尝试,但您可以尝试在lambda中使用p:Where((Person)p=>p.gender.Equals(“Female”))我知道这不起作用,因为这是一个数组列表,而不是列表,但我想知道您能否将完整的查询转换为我使用的格式?“来自personArrayList中的Person P,其中P.Gender==“Female”选择P;”在您的情况下,我的编译器无法找出P是什么类型。所以它永远无法到达p.gender。。。可能是因为我在这里使用.NET3.5吗?您需要键入arraylist:PersonalArrayList=new arraylist();是的,但从源代码来看,它是一个普通的数组列表。。。这就是为什么我问如何在您的系统中指定p的类型。。。。我知道这对IL来说是一样的,但我不完全理解你的系统。当然,您可以选择在方法中强制转换集合,但我看不出有任何理由不在初始化时键入它。我在Mac atm机上,所以无法尝试,但你可以尝试在lambda中使用p:Where((Person)p=>p.gender.Equals(“女性”))