Array
(
)

Ajuda Reflection

Alex A.
   - 17 fev 2012

Bom dia senhores.
Possuo 3 tipos de objetos armazenados em uma lista e quero coloca-los em uma datatable.
Porem, ao tentar usar o typeof (T) o meu codigo nao identifica o tipo do objeto. Se trocar T por algum tipo de objeto dentro da lista, ele reconhece.
Como faço para reconhecer o tipo do objeto em tempo de execução ??

#Código

        public static DataTable ListToDataTable<T>(List<T> list)
        {         
            DataTable dt = new DataTable();
            foreach (PropertyInfo info in typeof(T).GetProperties())
            {
                Type tipo = info.PropertyType;
                if (tipo.IsGenericType && tipo.GetGenericTypeDefinition() == typeof(Nullable))
                    tipo = Nullable.GetUnderlyingType(tipo);
                dt.Columns.Add(new DataColumn(info.Name, tipo));
            }
            foreach (T t in list)
            {
                DataRow row = dt.NewRow();
                foreach (PropertyInfo info in typeof(T).GetProperties())
                {
                    object value = info.GetValue(t, null);
                    if (value != null)
                    {
                        row[info.Name] = value;
                    }
                    else
                    {
                        row[info.Name] = DBNull.Value;
                    }
                }
                dt.Rows.Add(row);
            }
            return dt;
        }

Alex A.
   - 17 fev 2012

public static DataTable ListToDataTable<T>(List<T> list)
{
DataTable dt = new DataTable();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
Type tipo = info.PropertyType;
if (tipo.IsGenericType && tipo.GetGenericTypeDefinition() == typeof(Nullable))
tipo = Nullable.GetUnderlyingType(tipo);
dt.Columns.Add(new DataColumn(info.Name, tipo));
}
foreach (T t in list)
{
DataRow row = dt.NewRow();
foreach (PropertyInfo info in typeof(T).GetProperties())
{
object value = info.GetValue(t, null);
if (value != null)
{
row[info.Name] = value;
}
else
{
row[info.Name] = DBNull.Value;
}
}
dt.Rows.Add(row);
}
return dt;
}