Crear nuevo objeto PropertyInfo sobre la marcha

Esta es mi primera publicación, y aunque he buscado en temas relacionados con mi problema hasta cierto punto, me cuesta mucho encontrar la respuesta correcta.

Mi pregunta puede ser muy simple, pero soy consciente de que la respuesta podría no ser tan fácil de responder. Si alguno existe en absoluto.

Dicho esto, este es mi caso: como ejemplo, tengo una matriz de objetos PropertyInfo, que estoy usando para obtener las propiedades de una clase, como esta:

public PropertyInfo[] GetProperties (object o)
{
    PropertyInfo[] properties = o.GetType().GetProperties();

    return properties;
}

Parece fácil, ¿verdad? Ahora mi problema es este:cómo para crear un nuevo objeto PropertyInfo y agregarlo a la matriz?

He visto otras publicaciones donde los usuarios desean establecer el VALOR de un PropertyInfo, pero eso no es lo que necesito. Lo que necesito es crear sobre la marcha un nuevo objeto PropertyInfo, donde los únicos datos disponibles que tengo son losNombre y elTipo.

El caso de prueba que publiqué anteriormente no es más que un pequeño ejemplo de lo que estoy tratando de lograr. Mi verdadero y último objetivo es, de hecho, poder crear un nuevo PropertyInfo basado en esta clase:

public class DynamicClass
{
    public Type ObjectType { get; set; }
    public List<string> PropertyNameList { get; set; }
    public List<Type> PropertyTypeList { get; set; }
}

Espero que alguien pueda ayudarme a lograr esto. ¡Muchas gracias de antemano!

EDITADO: Olvidé agregar o.GetType () antes del método GetProperties (). Gracias Ilya Ivanov!

Estoy llamando al método SelectProperties así:

list = _queriable.Select(SelectProperties).ToList();

El método se ve así:

private Expression<Func<T, List<string>>> SelectProperties
{
    get
    {
       return value => _properties.Select
                      (
                          prop => (prop.GetValue(value, new object[0]) ?? string.Empty).ToString()
                      ).ToList();
        }
    }

Atentamente,

Luis

ACTUALIZAR:

Ok, entonces estoy siguiendo el consejo de 280Z28 y estoy heredando PropertyInfo en una nueva clase. He investigado más y encontré en MSDN que necesito anular los siguientes métodos: GetValue, SetValue, GetAccessors, GetGetMethod, GetSetMethod y GetIndexParameters.

Sin embargo, cuando intento llamar a la base con los parámetros, me dice un error y cito "No se puede llamar a un miembro abstracto: 'System.Reflection.PropertyInfo.GetAccessesors (bool)'". Si trato de llamar al método sin ningún parámetro, no aparece ningún error, pero creo que ese es el enfoque equivocado.

Esto es lo que tengo hasta ahora:

public override MethodInfo[] GetAccessors(bool nonPublic)
{
   MethodInfo[] temp = base.GetAccessors(nonPublic);

return temp;
}

ACTUALIZACIÓN 2:

Ok, eso no funcionó bien. Después de algunas horas de tratar de hacer una clase derivada de PropertyInfo o PropertyDescriptor, he decidido no seguir ese enfoque.

En cambio, tuve otra idea al leer otros mensajes. Mi verdadproblema radica en el hecho de que la clase que normalmente leo y uso para obtener las propiedades no siempre es la misma. Entonces me di cuenta de que lo que realmente necesito es solo una forma de crear unclase dinámica sobre la marcha, y soloentonces obtener las propiedades

Leí que hay algo llamado ExpandoObject y ElasticObject, aunque todavía no sé cómo aplicarlos a mi problema para obtener finalmente una solución.

Ok, ahora lo que realmente estoy haciendo es esto -> He estado usando la solución mencionada en el siguiente enlace:El complemento jQuery DataTables cumple con C #.

La cosa es que, esto supone que tendré diferentes modelos / clases estáticos para cada tabla de base de datos. Sin embargo, en mi caso, tendré dos tipos de columnas: las proporcionadas por cada clase de tabla DB (también conocidas como columnas básicas) y luego las columnas adicionales que ya estoy suministrando dinámicamente en mi adaptación.

Por ejemplo: si esta es la clase de tabla DB:

public class Table1
{
    public int Field1;
    public string Field2;
    public string Field3;
}

Y luego suministro una columna extra llamada"Acción" de tipo cadenaLuego, en la clase DataTableParser, en el atributo _properties debe haber la siguiente información:

_properties[0] should be int32 Field1
_properties[1] should be String Field2
_properties[2] should be String Field3
_properties[3] should be String Action

Y para ser sincero eso es.TODOS ¡Necesito! ¡Nada más y nada menos! El resto ya lo estoy analizando!

Al final, debido a que tengo un número de columnas diferente (suministrado) que el objeto pasado a la clase DataTableParser, siempre da error durante la clasificación y el filtrado del DataTable.

¿Alguna ayuda por favor? ¡Lo necesito de verdad! Gracias de nuevo.

Atentamente,

Luis

Respuestas a la pregunta(4)

Su respuesta a la pregunta