Syntax error in final key

1

In my code the following errors are appearing:

  

Error 1} expected **

     

Error 2 Type or namespace definition, or end-of-file expected **

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TesteVO;
using System.Data;
using TesteBancoDeDados;
using System.Reflection;

namespace TesteNegocio
{
public class NgcCliente
{
    public NgcCliente()
    {


    }

    public List <VoCliente> ConsutaCliente()
    {
        DataTable tabela = BDOracleCliente.ConsultaCliente();

        /*
        List<VoCliente> teste = tabela.AsEnumerable().Select(m => new VoCliente()
        {
            Codigo = m.Field<string>("Codigo"),
            Nome = m.Field<string>("Nome"),
            Endereco = m.Field<string>("Endereco"),
            Cidade = m.Field<string>("Cidade"),
            RG = m.Field<string>("RG"),
            CPF = m.Field<string>("CPF"),
            DataDeContrato = m.Field<DateTime>("DataDeContrato"),
            ValorMensalidade = m.Field<decimal>("ValorMensalidade"),
            Cancelado = m.Field<bool>("Cancelado")
        }).ToList();
        */

        public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()
        {
            var dataList = new List<TSource>();

            const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
            var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags)
                                    select new { Name = aProp.Name, 
                                    Type = Nullable.GetUnderlyingType(aProp.PropertyType) ?? 
                            aProp.PropertyType }).ToList();
            var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
                                        select new { Name = aHeader.ColumnName, 
                        Type = aHeader.DataType }).ToList();
            var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();

            foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
            {
                var aTSource = new TSource();
                foreach (var aField in commonFields)
                {
                    PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
                    var value = (dataRow[aField.Name] == DBNull.Value) ? 
                    null : dataRow[aField.Name]; //if database field is nullable
                    propertyInfos.SetValue(aTSource, value, null);
                }
                dataList.Add(aTSource);
            }
            return dataList;
        } 

        List<VoCliente> teste = tabela.ToList<VoCliente>();

        //return teste; 
    }
}
}
    
asked by anonymous 07.11.2017 / 12:46

1 answer

3

This method is inside another method, if you take it from the inside and leave it at the class level you should solve:

public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()

It's to take the whole body away.

One method can not be within another, even more public. In C # 7 it is possible to have a local function within a method, but it is private to the method.

The code style is likely to have other problems, even typing.

    
07.11.2017 / 12:52