Попробуйте продукт форматирования (я использую Подсказку/SQL SQL, Осуществляют рефакторинг от Красного Логического элемента). Можно установить, как Вы хотите, чтобы капитализация работала, и Ваш код будет всегда последовательно форматироваться. Оставьте свой мизинец и позвольте компьютеру сделать работу для Вас.
Изменить: все это в основном то, что делает 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 - см. этот архив .
Да, вы можете использовать такой код:
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();
.... ...