我從一個xml文件中讀取了一些屬性,其中有一個字符串指向一個llblgen對象,例如'article'。現在我已經建立了一個相當長的.NET:從字符串到對象
Select Case myString
Case "article"
return New ArticleEntity()
等等這是越來越相當醜陋,因爲它得到越來越長)。有一個更好的方法嗎 ?
(上面是vb.net,但是C#的例子是罰款以及)
我從一個xml文件中讀取了一些屬性,其中有一個字符串指向一個llblgen對象,例如'article'。現在我已經建立了一個相當長的.NET:從字符串到對象
Select Case myString
Case "article"
return New ArticleEntity()
等等這是越來越相當醜陋,因爲它得到越來越長)。有一個更好的方法嗎 ?
(上面是vb.net,但是C#的例子是罰款以及)
你可以創建一個字典映射串工廠方法,例如
Dictionary<string, Func<Animal>> _map = new Dictionary
{
("cat",() => new Cat()),
("dog",() => new Dog())
...
}
那麼你的case語句變成
return _map[myString]();
你可以將文件存儲和使用的類型名稱:
return Activator.CreateInstance(Type.GetType("Some.Type.String"));
(將工作,只要Some.Type.String
有一個默認的無參數構造函數。)
字符串是否完全代表對象類型的名稱。如果是的話,你可以做。
Object obj = Activator.CreateInstance("AssemblyName", "TypeName");
所以如果你已經從你可以做一個列表回來的類型......
List<object> list = new List<object>();
foreach(string typename in GetFromXMLFile())
{
list.Add(Activator.CreateInstance("AssemblyName", typename);
}
注意Activator.CreateInstance
得到了一個通用版本,使得強制轉換爲基類不必要的(如果這樣的基類或接口是可用的):
public static IMyTrait MakeMyTrait(Type t) {
return Activator.CreateInstance<IMyTrait>(t);
}
啊非常好。不知道對象是否與文件完全相同,但我寧願編輯該文件,也不要繼續使用那個難看的選擇案例。
感謝您的建議!
請澄清關係的字符串和類名之間存在 – devio 2008-10-28 23:04:56