将字符串转换为类名

时间:2009-01-29 21:21:18

标签: c# .net

我有一个表示自定义类名称的字符串变量。示例:

string s = "Customer";

我需要创建一个客户的arraylist。所以,需要的语法是:

List<Customer> cust = new .. 

如何转换字符串s以便能够在运行时创建此arraylist?

2 个答案:

答案 0 :(得分:61)

嗯,有一件事ArrayList不是通用的......你的意思是List<Customer>吗?

您可以使用Type.GetType(string)通过名称获取与类型关联的Type对象。如果程序集不是mscorlib或当前正在执行的类型,则需要包含程序集名称。无论哪种方式,你也需要命名空间。

您确定您确实需要通用类型吗?泛型主要提供编译时类型的安全性,如果你在执行时找到类型,显然你不会有太多的东西。你可能发现它很有用......

Type elementType = Type.GetType("Customer");
Type listType = typeof(List<>).MakeGenericType(new Type[] { elementType });

object list = Activator.CreateInstance(listType);

如果您需要使用该列表执行任何内容,您可能需要进行更多通用反射,例如...调用泛型方法。

答案 1 :(得分:16)

这是一个反思问题。您需要找到该类型然后实例化它的实例,如下所示:

Type hai = Type.GetType(classString,true);
Object o = (Activator.CreateInstance(hai));  //Or you could cast here if you already knew the type somehow

或,CreateInstance(assemblyName,className)

您需要注意命名空间/类型冲突,但这样做可以解决一个简单的场景。

另外,将它包装在try / catch中! Activator.CreateInstance很可怕!