簡體   English   中英

創建一個對象集合並進行查詢

[英]Create an object collection and query it

一個愚蠢的問題。 我有三節課。 類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對象保存。 最后我想以最后的形式得到它們。 我想要的是每個表單都有一個對象來保存所有變量,盡管它們具有不同的類型。

要創建一個新的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM