创建一个对象集合并进行查询

时间:2012-05-24 20:05:19

标签: c# oop

一个愚蠢的问题。我有三节课。 类DataTableManager是一种全局类。

public  class DataTableManager
{
    public DataTable dt1 { get; set; }
    public List<object> SchoolInfo { get; set; }
    public string ApplicationName {get;set;}
    public int number;
}

在公共类DataCreate中,我想向对象添加不同类型的变量,然后我们可以在另一个公共类Summary中获取它们。 我的问题是我不熟悉不同类型变量的对象集合。

例如,在

public class DataCreate 
{

   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int ID { get; set; }
   public GradeLevel Year;
}

我想将它们添加到SchoolInfo。假设它们来自文本框。不知道怎么做?

如何在我的第三课摘要中检索它?

感谢。

  

更新:

DataTableManager对象是一个包含所有表单信息的全局对象。在每个表单中我们都要设置对象并由DataTableManager对象保存。最后我想以最后的形式得到它们。我想要的是每个表单都有一个对象来保存所有变量,尽管它们有不同的类型。

2 个答案:

答案 0 :(得分:1)

要创建新的DataCreate对象并将其添加到DataTableManager对象的SchoolInfo列表,您需要执行以下操作:

DataTableManager manager = new DataTableManager();
DataCreate data = new DataCreate();
data.LastName = TextBox1.Text;
data.ID = TextBox2.Text;
manager.SchoolInfo.Add(data);

但是,我应该指出,将SchoolInfo声明为List<Object>类型的财产是不好的做法。将它声明为List<DataCreate>会好得多。

要将DataCreate对象从DataCreate对象本身添加到列表中,您需要执行以下操作:

manager.SchoolInfo.Add(this);

DataTableManager不是一个对象,它是一个类型。你必须实例化它来创建一个对象(就像我在调用new DataTableManager时所做的那样)。或者,你可以使它成为一个静态类,这样就没有需要实例化的对象,你可以通过它的类型名称直接访问它的成员(例如DataTableManager.SchoolInfo.Add(...)),但这不是你当前定义它的方式。

但是,我不建议按照你的方式做事情。拥有全局变量绝不是一个好主意。相反,如果表单需要访问DataTableManager对象,它应该要求它(通过将一个输入到表单上的构造函数的参数,或通过在表单上设置公共属性,或通过调用某种形式)表单上的公共初始化方法)。您必须在某处显示这些DataCreate表单的某些代码。该代码所在的类应该是实例化管理器并将其提供给表单。

但是,通常您不希望存储对所有表单的引用。通常,您只想存储输入的数据。要做到这一点,您需要创建一个没有功能的新类,只需要创建数据的公共属性。然后让表单返回其中一个对象,然后让中心类显示表单获取返回的数据并将其添加到管理器。

例如:

public class DataManager
{
    public List<StudentData> Students { get; set; }
    // etc.
}

public class StudentData
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    // etc.
}

public class StudentEntryDialog : Form
{
    public StudentData StudentData { get; set; }

    // ... code to call storeData method when user chooses to do so ...

    private void storeData()
    {
        StudentData = new StudentData();
        StudentData.FirstName = TextBox1.Text;
        StudentData.LastName = TextBox2.Text;
        // etc.
    }
}

public class CentralCodeOfSomeSort
{
    private DataManager manager = new DataManager();

    private showStudentEntry()
    {
        StudentEntryDialog dialog = new StudentEntryDialog();
        dialog.ShowDialog();
        if (dialog.StudentData != null)
            manager.Students.Add(dialog.StudentData);
    }
}

答案 1 :(得分:1)

我不确定你想要什么。只是猜测。为学生创建一个课程

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
    ...
}

并将您的列表定义为

public List<Student> SchoolInfo { get; set; }

现在您可以将学生添加到列表中

 var manager = new DataTableManager(); 
 var student = new Student {
     FirstName = firstNameTextBox.Text;
     LastName = lastNameTextBox.Text;
     ID = Int32.Parse(IdTextBox.Text);
 };
 manager.SchoolInfo.Add(student);  

您可以使用(作为示例)查询列表

var query = manager.SchoolInfo
    .Where(s => s.LastName.StartsWith("A")
    .OrderBy(s => s.LastName)
    .ThenBy(s => s.FirstName)