2008-10-28 75 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

啊非常好。不知道对象是否与文件完全相同,但我宁愿编辑该文件,也不要继续使用那个难看的选择案例。

感谢您的建议!