我从一个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