Si utilizas dynamic en C# acuérdate de agregar una referencia a Microsoft.CSharp

 

Pues eso… que estaba haciendo la prueba de usar Activator sin indicar el tipo al que quiero convertir una cadena y me daba error indicando que: "one or more types required to compile a dynamic expression cannot be found" y claro, ni idea… ya que suponía que eso de usar dynamic en C# era así, simplemente indicando que el tipo es dynamic y ya está. Pero no, debes tener una referencia a Microsoft.CSharp:

dynamic necesita una referencia a Microsoft.CSharp

 

De paso, te pongo el ejemplo de cómo instanciar una clase desde el contenido de una cadena, pero sin tener que hacer la conversión (o cast) a un tipo concreto.

Este ejemplo es una especie de ampliación de Crear un objeto a partir de una cadena con Activator.CreateInstance

 

private static void crearClase(string laClase)
{
    var todoBien = true;
    dynamic obj = null;

    Type elTipo = Type.GetType(laClase);
    try
    {
        obj = Activator.CreateInstance(elTipo);

        if (obj != null)
        {
            obj.Nombre = "Pepe";
            obj.Email = "pepe@outlook.com";

            Console.WriteLine("Objeto creado correctamente: {0}{1}{2}, {3}",
                              obj.GetType().Name, "\r\n",
                              obj.Nombre, obj.Email);
        }

    }
    catch (Exception ex)
    {
        Console.WriteLine("ERROR: " + ex.Message);
        todoBien = false;
    }

    if (!todoBien)
    {
        Console.WriteLine("Parece que el tipo: {0} no es del tipo adecuado.",
                          laClase);
    }

    Console.WriteLine();
}

 

 

Espero que te sea de utilidad.

Nos vemos.

Guillermo

Esta entrada fue publicada en cosas técnicas, mis cosas y etiquetada , , , , , . Guarda el enlace permanente.