C# 丢弃参数c中的对象类型#

C# 丢弃参数c中的对象类型#,c#,casting,polymorphism,C#,Casting,Polymorphism,这是我遇到问题的代码部分 List people=newlist() 这是由3种不同类型的对象填充的,都是从People类派生的 people.Add(new Student(constructorarguments); people.Add(new AcademicStaff(constructorarguments); people.Add(new AdministrativeStaff(constructorarguments); 这就是给我带来问题的代码 private void st

这是我遇到问题的代码部分

List people=newlist()

这是由3种不同类型的对象填充的,都是从People类派生的

people.Add(new Student(constructorarguments);
people.Add(new AcademicStaff(constructorarguments);
people.Add(new AdministrativeStaff(constructorarguments);
这就是给我带来问题的代码

private void studentCheckbox_CheckedChanged(object sender, EventArgs e)
{
    if (studentCheckbox.CheckState == CheckState.Checked)
    {
        foreach (Student student in people)
        {
            if (student.Compare(SearchTextBox.Text) == 0)
            {
                resultsListBox.Items.Add(student.Forename);
            }
        }
    }
    else
    {}
}
正如您从CheckState代码中看到的,它使用的是windows窗体。但我遇到的问题是,这并没有限制对学生的比较。它试图继承过去的学生,试图把院士们塑造成学生,这就是我的课程的缺点。在过去的几个小时里,我一直在努力,没有任何回旋余地,任何帮助都将不胜感激


我认为问题不在于表单或类本身,但我不知道为什么它试图转移到AcademicStaff,当我将它限制在学生类型时,这是预期的行为,编译器枚举您的集合并隐式地将每个项转换为学生类型。
如果您只想循环
学生
,则应首先使用以下各项筛选您的
人员
集合:

foreach(var student in people.OfType())
{
..
}

这是预期的行为,编译器枚举您的集合并隐式地将每个项强制转换为
Student
类型。
如果您只想循环
学生
,则应首先使用以下各项筛选您的
人员
集合:

foreach(var student in people.OfType())
{
..
}

您可以使用type()的linq方法:

private void studentCheckbox\u checked已更改(对象发送方,事件参数e)
{
if(studentCheckbox.CheckState==CheckState.Checked)
{
foreach(Student in people.OfType())
{
if(student.Compare(SearchTextBox.Text)==0)
{
resultsListBox.Items.Add(student.Forename);
}
}
}
其他的
{}
}

希望这将对您的任务有所帮助。

您可以使用类型()的linq方法:

private void studentCheckbox\u checked已更改(对象发送方,事件参数e)
{
if(studentCheckbox.CheckState==CheckState.Checked)
{
foreach(Student in people.OfType())
{
if(student.Compare(SearchTextBox.Text)==0)
{
resultsListBox.Items.Add(student.Forename);
}
}
}
其他的
{}
}
希望这将对您的任务有所帮助。

您不能在包含人员的列表中使用“Student”类型进行迭代,此代码不应编译。 您需要迭代如下内容:

foreach (People person in people)
如果你想让现在的人成为学生,你应该写:

Student s = person as Student;
然后你就可以访问student方法了。

你不能在有人的列表上使用“student”类型进行迭代,这段代码不应该编译。 您需要迭代如下内容:

foreach (People person in people)
如果你想让现在的人成为学生,你应该写:

Student s = person as Student;

然后您将能够访问学生方法。

谢谢!你不仅帮助了我,而且还帮助了我的理解!非常感谢。你不仅帮助了我,而且还帮助了我的理解!