2012-10-14 131 views
1

我有一個包含類的字典。然而,我有很多課程要添加到字典中,我想消除長長的添加列表,因爲它開始顯得雜亂無章。我正在考慮將文件中的所有數據加載到字典中,然後我意識到每次我想創建並添加一個新類時,都必須修改該文件。我寧願不得不在我新創建的類中包含一些可以自動將它添加到字典中的東西。我甚至不確定這是可能的,所以我會很感激任何幫助。添加到字典中c#

+0

是SQL的一個選項? –

+0

當你說字典包含類時,你的意思是它包含類或類的實例的類型對象? – Guffa

+0

Sql不是一個選項,它包含類的類型對象。 –

回答

0

嘗試使用反射來動態地找到所有需要的類。創建一個Assembly的實例,在其中定義類並嘗試將其過濾掉。下面的例子展示瞭如何找到名字以Task結尾的所有類。

var assembly = Assembly.GetExecutingAssembly(); 
var taskTypes = assembly.GetTypes() 
         .Where(t => t.Name.EndsWith("Task") && t.IsClass); 

Dictionary<string, object> instances = 
    new Dictionary<string, object>(taskTypes.Count()); 

foreach (Type classType in taskTypes) 
{ 
    object instance = Activator.CreateInstance(classType); 
    instances.Add(classType.Name, instance); 
    Console.WriteLine("Registered key {0} with object of type {1})", 
         classType.Name, 
         instance); 
} 

我用Activator.CreateInstance方法來創建類的實例,但是這可能不是你的情況是可能的,這取決於它們是否有參contructors等

另一種選擇可能是使用的一個可用的IoC容器,如autofac,但我需要關於您的問題的更多詳細信息,然後才能就此提供適當的建議。

+0

這是完美的,但是如果不是添加以通用名稱結尾的所有類,而是添加從某個類派生的所有類。那可能嗎? –

+0

其實Activator.CreateInstance將無法正常工作... –

+0

什麼都不起作用?我已經發布了一個完整的例子[這裏](http://codepaste.net/y7jh82) - 希望這可以幫助 –

0

使字典成爲某個類的靜態字段,或者使「添加類到字典」成爲靜態方法。

然後,您可以使用靜態構造函數每個類添加到字典:

class ClassDict { 
    ... 
    public static void AddClass(Type t) { 
     ... 
    } 
} 

class Foo { 
    static Foo() { 
     ClassDict.AddClass(typeof(Foo)); 
    } 
}