2008-10-28 74 views
4

我從一個xml文件中讀取了一些屬性,其中有一個字符串指向一個llblgen對象,例如'article'。現在我已經建立了一個相當長的.NET:從字符串到對象

Select Case myString 
    Case "article" 
    return New ArticleEntity() 

等等這是越來越相當醜陋,因爲它得到越來越長)。有一個更好的方法嗎 ?

(上面是vb.net,但是C#的例子是罰款以及)

+0

請澄清關係的字符串和類名之間存在 – devio 2008-10-28 23:04:56

回答

3

你可以創建一個字典映射串工廠方法,例如

Dictionary<string, Func<Animal>> _map = new Dictionary 
{ 
    ("cat",() => new Cat()), 
    ("dog",() => new Dog()) 
    ... 
} 

那麼你的case語句變成

return _map[myString](); 
2

你可以將文件存儲和使用的類型名稱:

return Activator.CreateInstance(Type.GetType("Some.Type.String")); 

(將工作,只要Some.Type.String有一個默認的無參數構造函數。)

1

字符串是否完全代表對象類型的名稱。如果是的話,你可以做。

 Object obj = Activator.CreateInstance("AssemblyName", "TypeName"); 

所以如果你已經從你可以做一個列表回來的類型......

List<object> list = new List<object>(); 


foreach(string typename in GetFromXMLFile()) 
{ 
    list.Add(Activator.CreateInstance("AssemblyName", typename); 
} 
0

注意Activator.CreateInstance得到了一個通用版本,使得強制轉換爲基類不必要的(如果這樣的基類或接口是可用的):

public static IMyTrait MakeMyTrait(Type t) { 
    return Activator.CreateInstance<IMyTrait>(t); 
} 
0

啊非常好。不知道對象是否與文件完全相同,但我寧願編輯該文件,也不要繼續使用那個難看的選擇案例。

感謝您的建議!