Создать новый объект PropertyInfo на лету

Это мой самый первый пост, и хотя я в некоторой степени искал темы, связанные с моей проблемой, яУ меня много проблем с поиском правильного ответа.

Мой вопрос может быть очень простым, но яЯ знаю, что ответ может быть не так легко дать. Если таковые вообще существуют.

С учетом сказанного, это мой случай: в качестве примера у меня есть массив объектов PropertyInfo, которые я использую для получения свойств из класса, например так:

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

    return properties;
}

Выглядит просто, правда? Теперь моя проблема заключается в следующем:как создать новый объект PropertyInfo и добавить его в массив?

Я видел другие посты, где пользователи хотят установить ЗНАЧЕНИЕ PropertyInfo, но это не то, что мне нужно. Что мне нужно, так это создать на лету новый объект PropertyInfo, где у меня есть только доступные данные:название иТип.

Тестовый пример, который я опубликовал ранее, является лишь небольшим примером того, чего я пытаюсь достичь. Моя истинная и конечная цель - создать новую PropertyInfo на основе этого класса:

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

Я надеюсь, что кто-то может помочь мне достичь этого. Спасибо заранее!

Отредактировано: я забыл добавить o.GetType () перед методом GetProperties (). Спасибо Илья Иванов!

Я вызываю метод SelectProperties так:

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

Метод выглядит так:

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

С наилучшими пожеланиями,

Луис

ОБНОВИТЬ:

Итак, я слежу за 280Z28 'Совет, и я наследую PropertyInfo в новом классе. Я'Я провел дополнительные исследования и обнаружил в MSDN необходимость переопределения следующих методов: GetValue, SetValue, GetAccessors, GetGetMethod, GetSetMethod и GetIndexParameters.

Однако, когда я пытаюсь вызвать базу с параметрами, я получаю сообщение об ошибке, и я цитирую "Невозможно вызвать абстрактный член: 'System.Reflection.PropertyInfo.GetAccessesors (BOOL) '», Если я пытаюсь вызвать метод без каких-либо параметров, он не выдает никакой ошибки, но я чувствую, что это неправильный подход.

Это то, что яу нас так далеко:

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

return temp;
}

ОБНОВЛЕНИЕ 2:

Хорошо, это не сработало. После нескольких часов попыток создать производный класс PropertyInfo или PropertyDescriptor я решил не использовать этот подход.

Вместо этого у меня была другая идея читать другие посты. Моя правдапроблема заключается в том, что класс, который я обычно читаю и использую для получения свойств, не всегда одинаков. Так что я понял, что мне действительно нужно просто способ создатьдинамический класс на лету и толькозатем получить свойства.

Я читал, что есть такая вещь, как ExpandoObject и ElasticObject, хотя я неЯ пока не знаю, как применить их к моей проблеме, чтобы наконец найти решение.

Хорошо, что я действительно делаю, так это -> Я использовал решение, указанное в следующей ссылке:Плагин jQuery DataTables соответствует C #.

Дело в том, что предполагается, что у меня будут разные статические модели / классы для каждой таблицы БД. Однако в моем случае у меня будет два типа столбцов: столбцы, предоставляемые каждым классом таблицы БД (или базовые столбцы), а затем дополнительные столбцы, которые я динамически добавляю уже в своей адаптации.

Например: если это класс таблицы БД:

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

И тогда я поставляю дополнительный столбец под названием "Действие» типа строки, затем в классе DataTableParser в атрибуте _properties должна содержаться следующая информация:

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

И, честно говоря, этоВСЕ Я нуждаюсь! Ни больше ни меньше! Остальное я уже разбираю!

В конце концов, поскольку у меня есть другое количество столбцов (поставляется), чем у объекта, переданного в класс DataTableParser, он всегда выдает ошибку во время сортировки и фильтрации DataTable.

Любая помощь, пожалуйста? Мне это действительно нужно! Еще раз спасибо.

С наилучшими пожеланиями,

Луис

Ответы на вопрос(4)

Ваш ответ на вопрос