Convirtiendo una cadena a un nombre de clase

Tengo una variable de cadena que representa el nombre de una clase personalizada. Ejemplo:

string s = "Customer"; 

Tendré que crear una lista de arrays de clientes. Entonces, la syntax necesaria es:

 List cust = new .. 

¿Cómo convierto la cadena para poder crear esta lista de arrays en tiempo de ejecución?

Bueno, para ArrayList no es genérico … ¿quisiste decir List ?

Puede usar Type.GetType(string) para obtener el objeto Type asociado a un tipo por su nombre. Si el ensamblado no es ni mscorlib ni el tipo actualmente en ejecución, deberá incluir el nombre del ensamblado. De cualquier manera, necesitarás el espacio de nombres también.

¿Estás seguro de que realmente necesitas un tipo genérico? Los generics en su mayoría proporcionan seguridad de tipo de tiempo de comstackción , que claramente no tendrá mucha si encuentra el tipo en el momento de la ejecución. Puede que te sea útil …

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

Si necesita hacer algo con esa lista, es posible que necesite hacer una reflexión más genérica … por ejemplo, para llamar a un método genérico.

Esta es una pregunta de reflexión. Necesitas encontrar el tipo y luego crear una instancia de él, algo como esto:

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

o, CreateInstance (assemblyName, className)

Sin embargo, tendrá que tener cuidado con los enfrentamientos entre el espacio de nombres y el tipo, pero eso hará el truco para un escenario simple.

Además, envuelve eso en un try / catch! Activator.CreateInstance es aterrador!