none
PropertyType.IsGenericType, PropertyType.GetGenericTypeDefinition e Nullable.GetUnderlyingType RRS feed

  • Discussão Geral

  • Recebi uma dica de código para a criação de um objeto DataTable a partir de uma lista de objetos. Segue o código:

    protected virtual DataTable buildDataTableFromComplexTypeList<T> ( List<T> complexList )
            {
                DataTable dataTable = new DataTable ( typeof(T).Name ); // Criando o objeto dataTable. Pegando o nome da classse T dinamicamente para usar como parâmetro do construtor.
                PropertyInfo[] properties = typeof ( T ).GetProperties ( ); // Pegando metadados através de reflection (System.Reflection)
    
                dataTable.Columns.AddRange 
                    ( properties.Select ( 
                        p => new DataColumn ( 
                            p.Name, p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition ( ) == typeof( Nullable<> ) ? Nullable.GetUnderlyingType ( p.PropertyType ) : p.PropertyType ) ).ToArray ( ) );
    Não estou entendo a lógica aplicada no trecho p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition ( ) == typeof( Nullable<> ) ? Nullable.GetUnderlyingType ( p.PropertyType ) : p.PropertyType. Tentei pesquisar sobre a propriedade PropertyType.IsGenericType e sobre os métodos PropertyType.GetGenericTypeDefinition ( ) e Nullable.GetUnderlyingType ( p.PropertyType ) mas não encontrei respostas claras o suficiente para mim. Tipo, não ficou claro o que eles retornam.

    Se alguém puder me explicar a lógica aplicada nesse trecho agradeço.

    sábado, 18 de fevereiro de 2017 13:58