创建对象集合并对其进行查询
本文关键字:查询 集合 合并 创建对象 | 更新日期: 2023-09-27 18:35:11
一个愚蠢的问题。我有三节课。类数据表管理器是一种全局类。
public class DataTableManager
{
public DataTable dt1 { get; set; }
public List<object> SchoolInfo { get; set; }
public string ApplicationName {get;set;}
public int number;
}
在公共类 DataCreate 中,我想向对象添加不同类型的变量,然后我们可以在另一个公共类摘要中获取它们。我的问题是我不熟悉不同类型变量的对象集合。
例如,在
public class DataCreate
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public GradeLevel Year;
}
我想将它们添加到学校信息。假设它们来自文本框。不知道该怎么做?
以及如何在我的第三节课摘要中检索它?
谢谢。
更新:
DataTableManager 对象是保存所有表单信息的全局对象。在每个表单中,我们都希望设置对象并由DataTableManager对象持有。最后我想以最后的形式得到它们。我想要的是每个表单都有一个对象来保存所有变量,尽管它们具有不同的类型。
要创建一个新的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);
}
}
我不确定你想要什么。只是猜测。为学生创建课程
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)