¿Por qué este código me dice que no se pudo encontrar el tipo o el espacio de nombres?

Dado el siguiente código:

var property = typeof(TEntity).GetProperty("Id");
var temp = (property.PropertyType)id;

VS subraya 'propiedad' en la segunda línea y me dice que no se puede encontrar el tipo o el espacio de nombres. ¿Por qué? He probado con y sin using System.Reflection en la parte superior y obtener el mismo resultado.

Pude solucionarlo usando Convert.ChangeType(id, property.PropertyType), pero tengo curiosidad por saber qué pasa con la especificación de C# que hace que el código anterior no sea válido.

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

Estás intentando emitir a través de algo que solo se conoce en tiempo de ejecución. C# no funciona así. La parte de tipo de un molde no es "una expresión que se evalúa como un Type referencia" - es el nombre de un tipo o parámetro de tipo.

No está claro lo que está tratando de lograr aquí, pero no podrá hacerlo a través de un casting como ese. ¿Qué esperas del tipo de tiempo de compilación de temp ¿ser - estar? ¿Eres consciente de que var ¿Es solo inferencia de tipo en tiempo de compilación, no escritura dinámica?

Si puede brindarnos más información sobre lo que está tratando de lograr, es posible que podamos ayudarlo más.

contestado el 22 de mayo de 12 a las 16:05

Tienes razón, tuve un pedo cerebral. No se puede transmitir en tiempo de diseño a algo que solo se conoce en tiempo de ejecución. ¡Do! - Chris

Espera un tipo (no variable de tipo System.Type pero tipo real) entre paréntesis, pero tal tipo (property.PropertyType) no existe. Para probar esto, agregue esto a su código:

public class property
{
    public class PropertyType
    {

    }
}

Ahora, el compilador estará satisfecho, pero probablemente esto no sea lo que desea hacer.

contestado el 22 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.