Свойство динамического объекта populator (без отражения)

Попробуйте продукт форматирования (я использую Подсказку/SQL SQL, Осуществляют рефакторинг от Красного Логического элемента). Можно установить, как Вы хотите, чтобы капитализация работала, и Ваш код будет всегда последовательно форматироваться. Оставьте свой мизинец и позвольте компьютеру сделать работу для Вас.

5
задан grenade 14 August 2009 в 11:38
поделиться

2 ответа

Изменить: все это в основном то, что делает dapper, но dapper гораздо более оптимизирован. Если бы я писал этот ответ сегодня, он бы читался просто: «используйте dapper».


Если вы не слишком хорошо разбираетесь в IL, есть альтернативы, которые обеспечат вам скорость IL и удобство рефлексии.


1297] Первый пример:

HyperDescriptor - использует пользовательскую модель PropertyDescriptor , которая имеет дело с IL для вас, поэтому все, что у вас есть, это код вроде (плюс однострочный для включения HyperDescriptor ):

public static IEnumerable<T> Read<T>(IDataReader reader) where T : class, new() 
{
    PropertyDescriptorCollection props =
        TypeDescriptor.GetProperties(typeof(T));

    PropertyDescriptor[] propArray = new PropertyDescriptor[reader.FieldCount];
    for (int i = 0; i < propArray.Length; i++)
    {
        propArray[i] = props[reader.GetName(i)];
    }
    while(reader.Read()) {
        T item = new T();
        for (int i = 0; i < propArray.Length; i++)
        {
            object value = reader.IsDBNull(i) ? null : reader[i];
            propArray[i].SetValue(item, value);
        }
        yield return item;
    }
}

Второй пример:

Выражения LINQ - довольно длинные, но я обсуждал это (и, как оказалось, выше) в usenet - см. этот архив .

9
ответ дан 14 December 2019 в 01:13
поделиться

Да, вы можете использовать такой код:

 for (int i = 0; i < dataRecord.FieldCount; i++)
                {

                    PropertyInfo propertyInfo = t.GetProperty(dataRecord.GetName(i));
                    LocalBuilder il_P = generator.DeclareLocal(typeof(PropertyInfo));

                    Label endIfLabel = generator.DefineLabel();

.... ...

0
ответ дан 14 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: