.NET:从字符串到对象

时间:2008-10-28 22:54:26

标签: .net

我从xml文件中读取了一些属性,其中包含一个引用llblgen对象的字符串,例如'article'。现在我已经建立了一个相当长的

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

等。随着时间越来越长,这变得相当丑陋;)。有更好的方法吗?

(以上是vb.net,但c#示例也很好)

5 个答案:

答案 0 :(得分:3)

你可以创建一个字典,将字符串映射到工厂方法,例如

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

然后您的案例陈述变为

return _map[myString]();

答案 1 :(得分:2)

您可以将类型名称存储在文件中并使用:

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

(只要Some.Type.String有一个默认的无参数构造函数,就可以工作。)

答案 2 :(得分:1)

字符串是否恰好代表对象类型的名称。如果是这样,你可能会这样做。

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

所以,如果您从列表中返回类型,则可以执行...

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


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

答案 3 :(得分:0)

请注意Activator.CreateInstance有一个通用版本,它不需要强制转换为基类(如果有这样的基类或接口):

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

答案 4 :(得分:0)

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

感谢您的建议!