2017-10-11 57 views
-1

我在School中試圖創建一個對象列表StudentStudent而不是School也可以有Teacher作爲列表。我想在啓動類時使用類名作爲參數,而不是實際的類類型作爲參數。如何使用字符串值傳遞類型爲<T>參數的類型?

public class Program 
{ 
    static void Main(string[] args) 
    { 
     //School object with list of student 
     var schoolWithStudent = SchoolWithOject("Student"); 
     //School object with list of teacher 
     var schoolWithTeacher = SchoolWithOject("Teacher"); 
    } 

    public static object SchoolWithOject(string objType) 
    { 
     var objType = Type.GetType("objType"); 
     var school = new School<objType>(); 
     return school; 
    } 
} 

public class School<T> 
{ 
    public int Id; 
    public string Name; 
    private List<T> _components; 

    public School() 
    { 
     _components = new List<T>(); 
    } 
} 

public class Student 
{ 
    public int Id; 
    public string Name; 
} 

public class Teacher 
{ 
    int Id; 
    string Name; 
} 
+0

你有沒有問過自己,爲什麼你想呢?你的代碼看起來並不動態,「新學校();有什麼問題? – maccettura

+1

另外,如果教師和學生具有相同的屬性(或共享一些屬性),它應該被抽象爲一個基類或一個接口(如'Person'或其他)。這樣,你可以限制你的'學校'只允許通用抽象 – maccettura

+0

檢查此https://stackoverflow.com/questions/2194949/how-to-use-class-name-as-parameter-in-c-sharp – Dahico

回答

0

如果我正確理解你的問題,並且你不是被迫使用泛型,我會推薦以下解決方案。

由於學校包含學生和老師,您可以實現兩種類型的界面。

interface IPerson 
{ 
    public int Id; 
    public string Name; 
} 

class Student : IPerson 
{ 
    // student specific stuff 
} 

class Teacher : IPerson 
{ 
    // teacher specific stuff 
} 

所以,你的學校是這樣的:

public class School 
{ 
    public int Id; 
    public string Name; 
    private List<Person> _persons; 

    public School() 
    { 
     _persons = new List<Person>(); 
    } 
} 
+0

這種方法會導致Dynamic Class不會實現接口。他們可以是任何東西。 –

+0

也許試圖找到一個更好的例子或描述你的問題。 –

+0

我剛剛編輯了代碼。希望它能更好地解釋我的問題。謝謝您的回答。 –

相關問題